Удалите пробелы перед полем с помощью AWK
-
03-07-2019 - |
Вопрос
(Почти точная копия Сохранение исходного формата 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;
}
С уважением заранее
Решение
Это работает, но при условии, что вам всегда захочется удалить три пробела.
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; }
Другие советы
awk '{sub(/^[ \t]+/, ""); print}'
Это из знаменитого списка лайнеров awk 1, который можно найти здесь: http://student.northpark.edu/pemente/awk/awk1line.txt
Мне кажется, это случай «неподходящего инструмента для работы».Я бы использовал sed`:
sed 's/^[ <tab>]*//' sample.out
Теперь, если проблема заключается в самых сокровенных деталях awk
, возможно, это не поможет;если проблема заключается в удалении пробелов, это происходит быстрее и (по крайней мере, возможно) проще.