awk命令:为csv文件添加前缀

时间:2017-06-05 15:28:11

标签: bash csv awk

我正在尝试为我的csv文件添加前缀。以下是源csv

  A,B
121ABC,London
2212ABC,Paris
312ABC,Tokyo

我正在使用以下awk命令

$ awk -F=',' -vOFS=',' '{$2="AC_"$2; print}' t.csv >t1.csv

但是,输出有点在csv文件中添加了另一列。

A,B,AC_
121ABC,London,AC_
2212ABC,Paris,AC_
312ABC,Tokyo,AC_

关于错误位置的任何指针?

4 个答案:

答案 0 :(得分:1)

您可以使用此awk

awk 'BEGIN{FS=OFS=","} {$2 = "AC_" $2} 1' file

A,AC_B
121ABC,AC_London
2212ABC,AC_Paris
312ABC,AC_Tokyo

答案 1 :(得分:1)

您将FS设置为=,而不是,。使用-F','-v FS=','但不使用-F=','

由于输入和输出字段分隔符都需要,,因此您应该在一个位置将它们一起设置为该值,而不是将它们分别设置为相同的值:

awk 'BEGIN{FS=OFS=","} {$2="AC_"$2; print}' t.csv >t1.csv

答案 2 :(得分:1)

使用sed

可能更简单
$ sed 's/,/&AC_/' file

  A,AC_B
121ABC,AC_London
2212ABC,AC_Paris
312ABC,AC_Tokyo

答案 3 :(得分:0)

这是因为您将字段分隔符作为逗号给出,但Input_file中没有逗号。 尝试:

awk '{$2="AC_"$2} 1' OFS=","   Input_file

通过与" AC _"连接来改变第二个字段;然后提到1将打印行。您可以将此命令的输出重定向到.csv文件。

EDIT1:根据OP,有逗号作为字段分隔符,所以现在更改解决方案。

awk -F, '{$2="AC_"$2} 1' OFS=","   Input_file