열에서 문자로 구분된 정보를 추출하는 방법은 무엇입니까?

열에서 문자로 구분된 정보를 추출하는 방법은 무엇입니까?

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

가장 중요한 정보는 4열과 6열 사이의 9열(가장 긴 열)에 숨겨져 있습니다 :. 예를 들어:

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 -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

관련 정보