为什么awk不打印新行?

为什么awk不打印新行?,awk,Awk,我有一个如下所示的文件: 1 2 AA 4 5 AA BB 7 8 AA BB CC 10 11 AA BB CC DD 我使用awk仅提取n=3的每一行n >>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 我试着使用\

我有一个如下所示的文件:

1 
2
AA 
4
5
AA BB
7
8
AA BB CC
10
11
AA BB CC DD
我使用awk仅提取
n=3的每一行
n

>>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 
我试着使用
\n
printf
\n
等等,但它没有像我期望的那样工作。请详细告知。

awk '{ if (NR%3==0) { print $0}  }'
您还可以使用
{printf(“%s\n\n”,$0)}
。如果单个
\n
不起作用


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

对每行使用
print
以下命令:

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

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

$ 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
$
$awk'NR%3==0'x>y

$x=$(似乎根本不起作用。第二个会产生一些错误。第一个根本不会打印正确的结果。我实际上想将文件中的每三行复制到另一个文件,仅此而已。我认为您的文件行终止符不正确。谢谢Shiplu。行终止符不正确。它现在可以工作了。哪个shell您使用的是?这是一个常规提示,不指示外壳类型。您如何证明数据在一行上是平坦的?您是否尝试更改RS变量?谢谢。我使用的是Cygwin,但行终止符不适合Shiplu提到的。