使用 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
FS
和OFS
分别设置输入和输出字段分隔符。
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
调用默认默认打印操作。
我有几百个文件要用 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
FS
和OFS
分别设置输入和输出字段分隔符。
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
调用默认默认打印操作。