Sed 使用awk向特定列添加字符
我有一个输入文件,需要将第3列(“)的第一个字符替换为(“S”) 文件1:Sed 使用awk向特定列添加字符,sed,awk,character,add,Sed,Awk,Character,Add,我有一个输入文件,需要将第3列(“)的第一个字符替换为(“S”) 文件1: 1 2 "45554323" p b 2 2 "34534567" f a 3 3 "76546787" u b 2 4 "56765435" f a 1 2 "S45554323" p b 2
1 2 "45554323" p b
2 2 "34534567" f a
3 3 "76546787" u b
2 4 "56765435" f a
1 2 "S45554323" p b
2 2 "S34534567" f a
3 3 "S76546787" u b
2 4 "S56765435" f a
结果:
1 2 "45554323" p b
2 2 "34534567" f a
3 3 "76546787" u b
2 4 "56765435" f a
1 2 "S45554323" p b
2 2 "S34534567" f a
3 3 "S76546787" u b
2 4 "S56765435" f a
我试过了
awk '{gsub(substr($3,0,1),"\"S"); print}'
但是它给了我3美元,在开头和结尾都有S,就像S45554323。你能给我一个解决方案吗?试试:
awk 'BEGIN { OFS = "\t"; } { sub( /[[:digit:]]/, "S", $3 ); print }' infile
这将产生:
1 2 "S5554323" p b
2 2 "S4534567" f a
3 3 "S6546787" u b
2 4 "S6765435" f a
或使用sed
:
sed -e 's/\("\)[0-9]/\1S/' infile
Perl解决方案:
perl -naE '$F[2] =~ s/"/"S/; say join "\t", @F'
awk '{sub(" \"","\"S"); print}' file
如果输出中需要空格,则可能需要将选项卡\t
替换为空格。另一种解决方案:
perl -naE '$F[2] =~ s/"/"S/; say join "\t", @F'
awk '{sub(" \"","\"S"); print}' file
结果-1:
awk '{sub(" \"","\"S"); print}' file
1 2 "S45554323" p b
2 2 "S34534567" f a
3 3 "S76546787" u b
2 4 "S56765435" f a
结果2:
awk '{sub(" \".","\"S"); print}' file
1 2 "S5554323" p b
2 2 "S4534567" f a
3 3 "S6546787" u b
2 4 "S6765435" f a
@比雷。。再次感谢你:)。。你能告诉我[:位:]的意思是什么吗。。我是这方面的新手awk@mohammadreshad亲爱的比雷,我有这样的代码NR=FNR'{a[$3]=$0;next;}{for(x in a){if(x==$5)print$1,$2,$3,$4,a[x];}}},但我希望$4以您在代码中所说的格式打印,但不使用管道。。我想在我的代码中使用你的代码!但是它总是打印1我不知道为什么这个
awk
命令的输入文件是什么?这似乎是一个不同的问题,或者至少与这个问题的答案没有直接关系。@Birei..我的脚本用于组合两个文件的列并将它们放入新文件。结果是这样的(11 2“00301271”测试13),但我想组合我的文件并将“S”添加到第4列(“S00301271”),我尝试了NR=FNR'{a[$3]=$0;next;}{for(a中的x){if(x==5)print$1,$2,$3,sub(/[[:digit:]]/,“S”,$4),a[x];}}但它用$4打印1