각각 7개의 열이 있는 거의 160개의 txt 파일이 있는데 이제 이 파일을 하나의 파일에 넣고 싶습니다. 첫 번째와 여섯 번째 열 데이터(Geneid, Length)는 각 파일에서 동일하므로 이를 최종 파일의 첫 번째와 두 번째 열로 만들고 일곱 번째 열 데이터(sample1,sample2,sample3...)를 추출하고 싶습니다. .) 최종 파일에 넣습니다.
예:
샘플 1:
Geneid Chr Start End Strand Length Sample1
ENSG00000223972.5 Chr1 34554 12227 ++ 1735 0
ENSG00000227232.5 Chr2 14404 1450 ++ 1351 12
ENSG00000278267.1 Chr3 17369 17436 ++ 68 20
ENSG00000243485.4 Chr4 29554 3003 ++ 1021 0
ENSG00000237613.2 Chr5 14404 35174 ++ 1219 0
샘플 2:
Geneid Chr Start End Strand Length Sample2
ENSG00000223972.5 Chr1 11869 1450 ++ 1735 180
ENSG00000227232.5 Chr2 14404 17436 ++ 1351 40
ENSG00000278267.1 Chr3 17369 17436 ++ 68 9
ENSG00000243485.4 Chr4 14404 3003 ++ 1021 49
ENSG00000237613.2 Chr5 17369 3003 ++ 1219 3
샘플 3:
Geneid Chr Start End Strand Length Sample3
ENSG00000223972.5 Chr1 17369 1450 ++ 1735 11
ENSG00000227232.5 Chr2 29554 17436 ++ 1351 156
ENSG00000278267.1 Chr3 34554 3003 ++ 68 56
ENSG00000243485.4 Chr4 14404 3003 ++ 1021 89
ENSG00000237613.2 Chr5 17369 35174 ++ 1219 23
최종 출력은 다음과 같아야합니다
Geneid Length Sample1 Sample2 Sample3
ENSG00000223972.5 1735 0 180 11
ENSG00000227232.5 1351 12 40 156
ENSG00000278267.1 68 20 9 56
ENSG00000243485.4 1021 0 49 89
ENSG00000237613.2 1219 0 3 23
답변1
(수정된 질문의 경우) awk
와 함께 사용하세요 .paste
awk '{printf("%s\t%s", $1, $6);
for(i=7;i<=NF;i+=7) printf ("\t%s", $i); printf "\n"}' <(paste files) >final_file
첨부된:printf
필드의 실제 값을 기준으로 서식 컨트롤을 변경합니다.
설명하다:
{printf ("%s\t%s" ,$1, $6)}
1 열과 6 열 을 먼저 인쇄합니다 .for(i=7;i<=NF;i+=7) printf ("\t%s", $i);
그런 다음 나머지 필드를 반복하고 열 7 과 모듈 7이 있는 모든 필드만 인쇄합니다.먼저 모든 것을
files
함께 붙여넣은 다음 에 전달합니다awk
. 즉, 여러 파일 이름을files
제공할 수 있으며 모든 파일은 해당 파일 이름으로 시작하고 그 뒤에 무엇이든 붙입니다.paste
myfiles*
myfiles