AWK-替换选定列的值会破坏输出格式
我有一个.csv文件,格式如下。AWK-替换选定列的值会破坏输出格式,awk,outputformat,Awk,Outputformat,我有一个.csv文件,格式如下。 id | name | date 我正在使用下面的Awk命令来更改行中的特定列,它可以正常工作。 awk-F“|”{$“$col””=“$val”;}1”filename.csv 我想保存输出,但是格式被破坏了 我想要的:100 |詹姆斯| 2015 我得到的:100詹姆斯2015 我如何避免第二个,并得到第一个 您可以设置OFS,输出字段分隔符,如本例所示: awk -F\| -v OFS=\| '{print $1, $2, $3 }' test.psv
id | name | date
我正在使用下面的Awk命令来更改行中的特定列,它可以正常工作。
awk-F“|”{$“$col””=“$val”;}1”filename.csv
我想保存输出,但是格式被破坏了
我想要的:100 |詹姆斯| 2015
我得到的:100詹姆斯2015
我如何避免第二个,并得到第一个 您可以设置OFS,输出字段分隔符,如本例所示:
awk -F\| -v OFS=\| '{print $1, $2, $3 }' test.psv
为-v OFS=\\\\\
变量赋值OFS
。它是\
块的替代BEGIN{OFS=“|”}
- 需要保护
不受shell的影响,因为shell级别的含义是将一个命令的输出传输到另一个命令的输入。使用|
或“|”
有两种方法\\\\
awk -F\| -v OFS=\| '{print $1, $2, $3 }' test.psv
为-v OFS=\\\\\
变量赋值OFS
。它是\
块的替代BEGIN{OFS=“|”}
- 需要保护
不受shell的影响,因为shell级别的含义是将一个命令的输出传输到另一个命令的输入。使用|
或“|”
有两种方法\\\\
awk -F "|" '{$"'"$col"'"="'"$val"'";}1' filename.csv
由于这些shell变量的不同值,它会使您面临潜在的错误。而是从shell变量填充awk变量,并在脚本中使用awk变量:
awk -F "|" -v col="$col" -v val="$val" '{$col=val}1' filename.csv
不过,请回答您的具体问题,当您为字段赋值时,awk会重建记录,因此您需要OFS具有与FS相同的值:
awk -v col="$col" -v val="$val" 'BEGIN{FS=OFS="|"} {$col=val}1' filename.csv
决不要让shell变量扩展为awk脚本主体的一部分:
awk -F "|" '{$"'"$col"'"="'"$val"'";}1' filename.csv
由于这些shell变量的不同值,它会使您面临潜在的错误。而是从shell变量填充awk变量,并在脚本中使用awk变量:
awk -F "|" -v col="$col" -v val="$val" '{$col=val}1' filename.csv
不过,请回答您的具体问题,当您为字段赋值时,awk会重建记录,因此您需要OFS具有与FS相同的值:
awk -v col="$col" -v val="$val" 'BEGIN{FS=OFS="|"} {$col=val}1' filename.csv
非常好,非常感谢。想解释一下“|”和“\|”之间的区别吗?另外,'-v'?也很好用,非常感谢。想解释一下“|”和“\|”之间的区别吗?还有“-v”?不客气。如果您打算在UNIX上进行更多的文本操作,我强烈推荐Arnold Robbins编写的《高效Awk编程》第四版。不客气。如果您打算在UNIX上进行更多的文本操作,我强烈推荐Arnold Robbins的《高效Awk编程》第四版。