AWK脚本不会打印CSV文件的最后一列

use*_*220 1 linux bash awk

我有以下awk脚本:

BEGIN { FS=","; OFS=","; } 
{ print $4,$1,$2; }
Run Code Online (Sandbox Code Playgroud)

这是我的输入文件:

a1,a2,a3,a4
b1,b2,b3,b4
Run Code Online (Sandbox Code Playgroud)

我希望它能回归:

a4,a1,a2
b4,b1,b2
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.相反,我得到:

,a1,a2
,b1,b2
Run Code Online (Sandbox Code Playgroud)

这是为什么?

anu*_*ava 5

最有可能的原因是由于每行末尾的DOS行结束\r.使用此gnu-awk命令可获得正确的输出:

awk -v RS='\r?\n' 'BEGIN { FS=OFS="," } { print $4,$1,$2 }' file
a4,a1,a2
b4,b1,b2
Run Code Online (Sandbox Code Playgroud)

  • 你应该提一下,由于多字符RS,这是特定的gawk.同样在某些平台(例如cygwin)中,您可能需要添加`-v BINMODE = 3`以获得所需的行为(但也许只是如果您使用`\ r \n`,而不是`\ r?\n`,我真的不记得了). (2认同)