Sed 使用awk向特定列添加字符

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

我有一个输入文件,需要将第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      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