使用awk

时间:2018-02-06 11:31:12

标签: awk gawk

我想用xargs处理几百个文件。他们都需要修复他们的第一栏。

因此我需要一个awk命令将前缀“ID_”附加到文件的第一列(第一个标题行除外)。任何人都可以帮我这个吗?

沿线的东西:

gawk -f ';' "{$1='ID_' $1; print $0}" file.csv > file_processed.csv
但是,我不是这个命令的专家。而且我更愿意进行一些就地处理,而不是制作每个文件的副本。事先,我在VIM中创建了它,但之后我只有一个文件。

:%s/^-/ID_/

我希望有人可以帮助我。

2 个答案:

答案 0 :(得分:3)

gawk 'BEGIN{FS=";"; OFS=";"} {if(NR>1) $1="ID_"$1; print}' file.csv > file_processed.csv

FSOFS分别设置输入和输出字段分隔符。

NR>1检查当前行号是否大于1,因此我们不会修改标题行。

您还可以使用-i inplace选项修改文件:

gawk -i inplace 'BEGIN{FS=";"; OFS=";"} {if(NR>1) $1="ID_"$1; print}' file.csv

修改

在详细阐述原始问题之后,这是最终版本:

gawk -i inplace 'BEGIN{FS=OFS=";"} NR>1{sub(/^-/,"ID_",$2)} 1' file.csv

-替换第二列开头的ID_NR>1操作适用于除第一(标题)行以外的所有操作。 1调用默认的默认打印操作。

答案 1 :(得分:1)

如果您只想在第一个字段上执行某些操作(尤其是添加前缀),则与在整行中添加前缀没有区别。

所以你可以awk '$0 = "ID_" $0' file.csv它应该做的工作。如果你想让它“改变现状”,你可以:

awk '$0="ID_"$0' csv >/tmp/foo && mv /tmp/foo file.csv

您还可以使用sed

sed -i 's/^/ID_/' file

-i执行“就地修改”

您提到了vim,并提供了s/^-/ID_/ cmd,它没有添加前缀(ID_),它将替换 -的前导ID_,它们是不同的。