我想用xargs处理几百个文件。他们都需要修复他们的第一栏。
因此我需要一个awk命令将前缀“ID_”附加到文件的第一列(第一个标题行除外)。任何人都可以帮我这个吗?
沿线的东西:
gawk -f ';' "{$1='ID_' $1; print $0}" file.csv > file_processed.csv
但是,我不是这个命令的专家。而且我更愿意进行一些就地处理,而不是制作每个文件的副本。事先,我在VIM中创建了它,但之后我只有一个文件。
:%s/^-/ID_/
我希望有人可以帮助我。
答案 0 :(得分:3)
gawk 'BEGIN{FS=";"; OFS=";"} {if(NR>1) $1="ID_"$1; print}' file.csv > file_processed.csv
FS
和OFS
分别设置输入和输出字段分隔符。
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_
,它们是不同的。