使用awk将特征添加到特定列

时间:2012-10-10 08:24:12

标签: sed awk character add

我有一个输入文件,我需要将第3列(“)的第一个字符替换为(”S)

File1中

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"S提供{{1}}。你能给我一个解决方案吗?

3 个答案:

答案 0 :(得分:3)

尝试:

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

答案 1 :(得分:0)

Perl解决方案:

perl -naE '$F[2] =~ s/"/"S/; say join "\t", @F'

如果输出中需要使用空格,则可能需要将选项卡\t替换为空格。

答案 2 :(得分:0)

另一种解决方案:

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