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

使用awk将前缀附加到文件的第一列,awk,gawk,Awk,Gawk,我有几百个文件要用xargs处理。他们都需要修复他们的第一列 因此,我需要一个awk命令将前缀“ID_”附加到文件的第一列(第一行标题除外)。有人能帮我吗 大致上: gawk -f ';' "{$1='ID_' $1; print $0}" file.csv > file_processed.csv 不过,我不是指挥专家。我更愿意进行一些就地处理,而不是复制每个文件。之前,我在VIM中创建了它,但当时我只有一个文件 :%s/^-/ID_/ 我希望有人能在这里帮助我 如果您只想在第一个字

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

因此,我需要一个awk命令将前缀“ID_”附加到文件的第一列(第一行标题除外)。有人能帮我吗

大致上:

gawk -f ';' "{$1='ID_' $1; print $0}" file.csv > file_processed.csv
不过,我不是指挥专家。我更愿意进行一些就地处理,而不是复制每个文件。之前,我在VIM中创建了它,但当时我只有一个文件

:%s/^-/ID_/

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

如果您只想在第一个字段上执行某些操作,特别是添加前缀,那么这与将前缀添加到整行没有什么不同

因此,您只需
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\
替换前面的
-
,它们是不同的。

如果您只是想做点什么,特别是在第一个字段添加前缀,这与将前缀添加到整行没有什么不同

gawk 'BEGIN{FS=";"; OFS=";"} {if(NR>1) $1="ID_"$1; print}' file.csv > file_processed.csv
因此,您只需
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\u/
cmd,它不添加前缀(
ID\u
),它将
ID\u
替换前面的
-
,它们是不同的

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
调用默认打印操作

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
调用默认的打印操作。

你说得对。这是我的错。实际上,我现在需要在许多文件上执行VIM替换命令。因此,它确实是对前导“-”的替换,而不仅仅是串联。很抱歉造成混乱,非常感谢您的帮助!你是对的。这是我的错。实际上,我现在需要在许多文件上执行VIM替换命令。因此,它确实是对前导“-”的替换,而不仅仅是串联。很抱歉造成混乱,非常感谢您的帮助!事实证明,我需要将一个替换操作“-”转换为“ID_uu2;”作为列值的前缀,并且该操作的目标是第二列而不是第一列:我正在尝试
gawk-I inplace'BEGIN{FS=“;”;OFS=“;”}{if(NR>1)$2=gsub(^-,“ID_2;,$2);print}file.csv
,但它没有按预期工作。
[g]sub()
就地修改变量,所以您不需要赋值,因此:
{if(NR>1)sub(/^-/,“ID”,$2);print}
更糟糕的是-
'BEGIN{FS=OFS=“;”}NR>1{$1=“ID_“$1}1”
,但实际上您可能只需要
'NR>1{$0=“ID_“$0}1”
。我需要将“-”替换为“ID”对于列值的前缀,并且该操作的目标是第二列而不是第一列:我正在尝试使用
gawk-I替换'BEGIN{FS=“;”;“OFS=“;”}{if(NR>1)$2=gsub(^-“,”ID_“,$2);print}'file.csv
,但它没有按预期工作。
[g]sub()
修改变量,所以不需要赋值,因此:
{if(NR>1)sub(/^-/,“ID_”,$2);print}
更糟糕的是--
'BEGIN{FS=OFS=“;”}NR>1{$1=“ID_”$1}1'
,但实际上您可能只需要
'NR>1{$0=“ID_”$0}1'