1

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

我试过

awk '{gsub(substr($3,0,1),"\"S"); print}'

但它给了我$3开头S和结尾,比如"S45554323"S. 你能给我一个解决方案吗?

4

3 回答 3

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
于 2012-10-10T08:27:37.500 回答
0

Perl 解决方案:

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

如果输出中需要空格,您可能需要将制表符替换为\t空格。

于 2012-10-10T08:33:22.213 回答
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
于 2012-10-10T18:03:09.480 回答