为什么awk没有打印出换行符?

时间:2012-02-28 22:44:53

标签: awk

我有一个看起来像这样的文件:

1 
2
AA 
4
5
AA BB
7
8
AA BB CC
10
11
AA BB CC DD

我使用 awk 仅提取nth所在的n=3行。

>>awk 'NR%3==0' /input/file_foo >> output/file_foobar

输出显示在一行中:

AA AA BB AA BB CC AA BB CC DD

.....等等

我希望它显示为:

AA 
AA BB 
AA BB CC 
AA BB CC DD 

我尝试将\nprintf\n一起使用,依此类推,但它并不像我预期的那样有效。请指教。

3 个答案:

答案 0 :(得分:9)

一种冗长的方式,

awk '{ if (NR%3==0) { print $0}  }'

您也可以使用{printf("%s\n\n", $0)}。如果单\n不起作用。

如果它仍然不起作用,您可能需要检查行终止符。这可能不合适。使用RS中的awk变量分隔异常行终止符。

答案 1 :(得分:3)

我认为问题在于你显示数据的方式,而不是处理过程。

$ cat x
1 
2
AA 
4
5
AA BB
7
8
AA BB CC
10
11
AA BB CC DD
$ awk 'NR%3==0' x
AA 
AA BB
AA BB CC
AA BB CC DD
$

我怀疑你所做的与:

相似
$ awk 'NR%3==0' x > y
$ x=$(<y)
$ echo $x
AA AA BB AA BB CC AA BB CC DD
$ echo "$x"
AA 
AA BB
AA BB CC
AA BB CC DD
$

这会让你感到困惑。另见:Capturing multi-line output to a bash variable

答案 2 :(得分:2)

对每一行使用print以下内容:

awk 'NR%3==0 { print $0 }' /input/file_foo >> output/file_foobar