3

我在使用 AWK 从流中简单地删除字段时遇到问题,如下所示:

  1 int blah (void)
  2 {
  3         if (foo) {
  4                 printf ("blah\n");
  5         }       
  6         return 0;
  7 }  

我使用以下代码删除第一个字段:

$ awk '{ $1=""; 打印}'example.out

 int blah (void)
 {
 if (foo) {
 printf ("blah\n");
 }
 return 0;
 }

为什么会这样?这是因为 AWK 删除了所有空格 - 这可以防止吗?

提前致以亲切的问候

4

1 回答 1

2

http://awk.freeshell.org/RangeOfFields

包含如何操作的描述。它还链接到http://student.northpark.edu/pemente/awk/awktail.txt,其中包含问题的 3 个解决方案。据我所知,如果您分配给一个字段,则输出字段分隔符用于将所有字段连接在一起。就这么" "+一下子崩塌成一个空间。不过,我不是 awk 专家。例如,尝试分配:给变量OFS,冒号而不是空格将导致输出中的字段之间:

echo a b c | awk 'BEGIN{ OFS = ":" } { $1=""; print }'
$ :b:c

如果您使用g awk,那么您可以使用它的gensub扩展名,我觉得使用起来非常简单:

print gensub($1 "[\t ]*(.*)", "\\1", 1); 
于 2009-01-03T02:06:02.887 回答