如何从列中提取由字符分隔的信息?

如何从列中提取由字符分隔的信息?

data我有一个这样的文件:

head data

19  54240283    .   T   C   .   .   .    188,18:208:14:102:18:189:209:37.7222:37.4681:9:139:9:50:50.8889:40.3545:919.145:640.562:0
1   103020      .   A   C   .   .   .    1,2:3:2:2:2:2:4:38:38:2:2:0:0:46.5:28:0.5:162:0
2   8797402     .   G   A   .   .   .    0,3:3:3:0:3:0:3:38:0:0:3:0:38.3333:840.056:0

最重要的信息隐藏在第 9 列(最长的一列),就在第 4 列和第 6 列之间:。例如:

19  54240283    .   T   C   .   .   .    18:189
1   103020      .   A   C   .   .   .    2:2
2   8797402     .   G   A   .   .   .    3:0

最后,我想将它们提取出来并为它们创建新列。例如,

19  54240283    .   T   C   .   .   .    18    189
1   103020      .   A   C   .   .   .    2     2
2   8797402     .   G   A   .   .   .    3     0

谁能帮我弄清楚如何做到这一点?谢谢!

答案1

awk解决方案:

awk -F'[[:space:]]+|:' '{ print $1,$2,$3,$4,$5,$6,$7,$8,$13,$14 }' data | column -t

输出:

19  54240283  .  T  C  .  .  .  18  189
1   103020    .  A  C  .  .  .  2   2
2   8797402   .  G  A  .  .  .  3   0

  • -F'[[:space:]]+|:'- 空格:被视为字段分隔符

答案2

perl -pe 's|\d+,(\S+)$|join "\t", (split /:/, $1)[4,5]|e' data

结果

19  54240283    .   T   C   .   .   .    18     189
1   103020      .   A   C   .   .   .    2      2
2   8797402     .   G   A   .   .   .    3      0

相关内容