(Почти точная копия Сохранение оригинального формата POST, проходящего через AWK, представленная тем же человеком.)
У меня простой вопрос по граммawk, показанный ниже:
1 int blah (void)
2 {
3 if (foo) {
4 printf ("blah\n");
5 }
6 return 0;
7 }
Используя следующий код gawk - используя gensub () для сохранения исходного форматирования:
gawk '{ print gensub($1, "\t", 1) }' ./sample_code.out
int blah (void)
{
if (foo) {
printf ("blah\n");
}
return 0;
}
Как я могу использовать граммawk или awk (возможно, с регулярными выражениями) для удаления предыдущего пробела перед полем $ 1 (^)
Иллюстрировано ниже:
int blah (void)
{
if (foo) {
printf ("blah\n");
}
return 0;
}
С уважением заранее
Он хочет удалить числа, убрав все ведущие пробелы, сохранив форматирование.
(По крайней мере, это моя интерпретация вопроса :-))
Спасибо за ваши предложения, ребята! :) На самом деле, пожалуйста, переборщите с моим непониманием - я новичок в AWK. Винько, правильно - Спасибо :)





awk '{sub(/^[ \t]+/, ""); print}'
Это из известного списка лайнеров awk 1, его можно найти здесь: http://student.northpark.edu/pemente/awk/awk1line.txt
Это работает, но вы всегда будете готовы разделить 3 пробела.
vinko@parrot:~$ cat foo.c
1 int blah (void)
2 {
3 if (foo) {
4 printf ("blah\n");
5 }
6 return 0;
7 }
vinko@parrot:~$ gawk '{ print gensub(/^ /,"",1,gensub($1, "", 1)) }' foo.c
int blah (void)
{
if (foo) {
printf ("blah\n");
}
return 0;
}
Мне кажется, это случай «неправильного инструмента для работы». Я бы использовал sed`:
sed 's/^[ <tab>]*//' sample.out
Теперь, если проблема заключается во внутренних деталях awk, это может быть бесполезным; если проблема в том, чтобы удалить пробелы, это быстрее и (по крайней мере, возможно) проще.
Привет, Джонатан, прежде всего спасибо за ответ. Да - можно использовать sed, но при использовании этой реализации исходное форматирование удаляется
$ 1 никогда не содержит пробелов. Ваш пример показывает, что вы добавляете пробел, но в тексте вы говорите, что хотите его удалить. Измените свой вопрос, чтобы четко указать, что вы получаете и что хотите делать.