이런 파일이 있어요
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