새 줄의 두 번째 열에 있는 각 "단어"를 인쇄하고 각 새 줄의 첫 번째 열에 있는 텍스트를 복사해야 합니다. 열은 탭으로 구분되며 두 번째 열의 모든 "단어"는 "GO:"로 시작하고 공백으로 구분됩니다. 또한 각 줄에는 1개에서 수십 개까지 다양한 "단어" 수가 있습니다.
예를 들어
TRINITY_DN23871_c0_g1_i1 GO:0003735 GO:0005783 GO:0005829
TRINITY_DN6318_c1_g1_i1 GO:0004707 GO:0005524
원하는 출력
TRINITY_DN23871_c0_g1_i1 GO:0003735
TRINITY_DN23871_c0_g1_i1 GO:0005783
TRINITY_DN23871_c0_g1_i1 GO:0005829
TRINITY_DN6318_c1_g1_i1 GO:0004707
TRINITY_DN6318_c1_g1_i1 GO:0005524
나는 awk를 사용해 보았습니다.
awk -v RS=" " '{print}' unique.ID_all.unique.GOs2
하지만 내가 얻는 것은
TRINITY_DN23871_c0_g1_i1
GO:0003735
GO:0005783
GO:0005829
TRINITY_DN6318_c1_g1_i1
GO:0004707
GO:0005524
아이디어가 부족해요. 누구든지 도와줄 수 있나요?
답변1
2부터 필드 수( NF
)까지 반복하고 첫 번째 필드와 다른 필드를 탭으로 구분하여 인쇄할 수 있습니다.
awk '{ for (i=2;i<=NF;i++) print $1"\t"$i }' unique.ID_all.unique.GOs2
답변2
밀러 사용(https://github.com/johnkerl/miller), 다음부터 시작
TRINITY_DN23871_c0_g1_i1 GO:0003735 GO:0005783 GO:0005829
TRINITY_DN6318_c1_g1_i1 GO:0004707 GO:0005524
그리고 달리는 중
mlr --nidx --fs tab then reshape -r "^[^1]" -o item,value then cut -x -f item input.tsv >output.tsv
당신은 할 것
TRINITY_DN23871_c0_g1_i1 GO:0003735
TRINITY_DN23871_c0_g1_i1 GO:0005783
TRINITY_DN23871_c0_g1_i1 GO:0005829
TRINITY_DN23871_c0_g1_i1
TRINITY_DN6318_c1_g1_i1 GO:0004707
TRINITY_DN6318_c1_g1_i1 GO:0005524
이 명령에 대한 몇 가지 참고 사항:
--nidx --fs tab
,입력 및 출력 형식 설정reshape -r "^[^1]" -o item,value
, 입력 파일을 와이드 형식에서 긴 형식으로 변환합니다.cut -x -f item
출력 열 선택