使用 awk 将前缀附加到文件的第一列

Append prefix to first column of a file with awk

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

因此我需要一个 awk 命令来将前缀 "ID_" 附加到文件的第一列(第一个 header 行除外)。谁能帮我解决这个问题?

沿线的事情:

gawk -f ';' "{='ID_' ; print [=10=]}" file.csv > file_processed.csv

不过我不是这个命令的专家。而且我宁愿进行一些就地处理,而不是制作每个文件的副本。之前,我在 VIM 中制作了它,但后来我只有一个文件。

:%s/^-/ID_/

我希望有人能在这里帮助我。

如果你只是想做一些事情,特别是在第一个字段上添加前缀,这与在整行中添加前缀没有什么不同。

所以您只需 awk '[=12=] = "ID_" [=12=]' file.csv 它就可以完成工作。如果你想做到"change in place",你可以:

awk '[=10=]="ID_"[=10=]' csv >/tmp/foo && mv /tmp/foo file.csv

您也可以使用 sed:

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

-i "in-place modification"

您提到 vim,并给了 s/^-/ID_/ 命令,它不会 添加 前缀 (ID_),它会 ID_替换开头的-,它们是不同的。

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

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

NR>1检查当前行号是否大于1,所以我们不修改header行。

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

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

编辑

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

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

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