添加额外列时 AWK 奇怪的输出行为

添加额外列时 AWK 奇怪的输出行为

我有一个 file.csv 其中包含:

ID,FN,LN,NUM
576,Pra,Mar,3
688,India,Desa,3
645,Ami,Path,5
245,Me,Yo,4

当我尝试打印所有列字段时,它工作正常

awk '{print $1,$2,$3,$4}' FS=, OFS=, file.csv

ID,FN,LN,NUM
576,Pra,Mar,3
688,India,Desa,3
645,Ami,Path,5
245,Me,Yo,4

但如果我尝试在末尾添加额外的列,它将不起作用

awk '{print $1,$2,$3,$4,"R"}' FS=, OFS=, file.csv

,R,FN,LN,NUM
,R576,Pra,Mar,3
,R688,India,Desa,3
,R645,Ami,Path,5
245,Me,Yo,4,R

我想要的输出是

ID,FN,LN,NUM,R
576,Pra,Mar,3,R
688,India,Desa,3,R
645,Ami,Path,5,R
245,Me,Yo,4,R

我做错了什么?

答案1

如果您的输入文件有回车/换行结尾,它将执行此操作。

这是 vi 中的样子(为了清楚起见,您可能需要列表模式):

Wed Mar 30 18:53:01 EDT 2016
ID,FN,LN,NUM^M
576,Pra,Mar,3^M
688,India,Desa,3^M
645,Ami,Path,5^M
245,Me,Yo,4^M
Wed Mar 30 18:53:01 EDT 2016
ID,FN,LN,NUM^M,R
576,Pra,Mar,3^M,R
688,India,Desa,3^M,R
645,Ami,Path,5^M,R
245,Me,Yo,4^M,R

在第二个示例中,^M字符位于“,R”之前,使得该字符打印在行的开头。

如果您在以下位置查看此内容维姆而不是,你会看到类似的东西。

您可以通过不同的方式转换行结束符:

  • 维姆,如果您键入controlG,您会注意到状态行中有一个“[dos]”,然后通过键入“:set”(回车)在输出中看到“dos”。您可以通过以下方式转换
    :设置 ff=unix
    :w!
  • 在命令行上,您可能有dos2unix(也可以)。

进一步阅读:

相关内容