awk 작업

awk 작업

이런 파일이 있어요

SRR959756.1081725       1       RNU2-54P:112:133:hsa-miR-1246
SRR959756.1162547       1       RNU2-54P:112:133:hsa-miR-1246
SRR959756.128602        2       RNU2-37P:85:108:hsa-miR-877-3p  RNU2-59P:99:122:hsa-miR-877-3p

이것은 탭으로 구분된 파일이며 다음과 같은 결과를 원합니다.

SRR959756.1081725       1       RNU2-54P:112:133:hsa-miR-1246
SRR959756.1162547       1       RNU2-54P:112:133:hsa-miR-1246
SRR959756.128602        2       RNU2-37P:85:108:hsa-miR-877-3p  
SRR959756.128602        2       RNU2-59P:99:122:hsa-miR-877-3p

세 번째 행과 마찬가지로 세 번째 열과 네 번째 열이 있습니다. 그러나 항상 첫 번째와 두 번째 열, 세 번째 열, 다음 줄에 첫 번째와 두 번째 열, 네 번째 열을 인쇄해야 합니다.

awk에서 어떻게 할 수 있나요?

답변1

$ awk -v OFS='\t' '{for (i=3;i<=NF;i++)print $1,$2,$i}' file
SRR959756.1081725       1       RNU2-54P:112:133:hsa-miR-1246
SRR959756.1162547       1       RNU2-54P:112:133:hsa-miR-1246
SRR959756.128602        2       RNU2-37P:85:108:hsa-miR-877-3p
SRR959756.128602        2       RNU2-59P:99:122:hsa-miR-877-3p

어떻게 작동하나요?

  • -v OFS='\t'

    그러면 출력 필드 구분 기호 AKA OFS가 탭으로 설정됩니다.

  • for (i=3;i<=NF;i++) print $1,$2,$i

    그러면 열 3과 그 이후의 모든 열에서 시작하여 루프가 실행되고 열 1과 열 2 앞의 행에 인쇄됩니다.

답변2

awk '{print $1,$2,$3}$4{print $1,$2,$4}'

==

awk '{print $1,$2,$3;$3="\b"}$4'

또는

awk -v OFS="\t" '$4{$4="\n"$1"\t"$2"\t"$4}1'

==

awk -v OFS="\t" '$4{sub("^","\n"$1"\t"$2"\t",$4)}1'

형식화된 출력을 원할 경우 OFS 변수를 사용하거나 다음을 -v OFS='\t'통해 출력을 파이프 할 수 있습니다.column -t

관련 정보