我在使用 AWK 简单地从流中删除字段时遇到问题,如下所示:
1 int blah (void)
2 {
3 if (foo) {
4 printf ("blah\n");
5 }
6 return 0;
7 }
我使用以下代码删除第一个字段:
$ awk '{ $1=""; print }' example.out
int blah (void)
{
if (foo) {
printf ("blah\n");
}
return 0;
}
为什么会这样?这是因为 AWK 删除了所有空格 - 这可以避免吗?
最佳答案
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
如果您使用 gawk,那么您可以使用它的 gensub
扩展,我发现它非常简单易用:
print gensub($1 "[\t ]*(.*)", "\\1", 1);
关于awk - 保持原始格式 POST 通过 AWK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/408469/