여러 파일의 선택한 열 병합

여러 파일의 선택한 열 병합

여러 개의 파일(~15개)이 있고 각 파일에는 여러 개의 데이터 열(탭으로 구분)이 있습니다. 예를 들어:

파일 1

aa1    399     1815
aa2    1908    4064
aa3    4523    5656

파일 2

bb1    5304317    5305057
bb2    5305057    5305824
bb3    5306871    5307875

등.

각 파일의 두 번째 열을 읽고 나란히 인쇄하여 15열 출력을 만들고 싶습니다. 예를 들어:

산출

399     5304317    7526    12455
1908    5305057    8195    14538
4523    5306871    9216    15150

각 열은 다른 파일에 있습니다. 첫 번째 열에 주목하세요산출두 번째 열입니다파일 1,두 번째 열산출두 번째 열입니다파일 2.

페이스트를 사용하려고 생각했습니다. 그러나 각 입력 파일의 모든 데이터를 배치합니다. 이것이 어떻게 달성될 수 있습니까?

답변1

각각 3개의 열이 있는 3개의 파일에 대해 다음과 같이 사용할 수 있습니다.

pr -m -t -s file1 file2 file3|awk '{printf("%s\t%s\t%s\n",$2,$5,$8)}'

파일 수와 파일당 필드 수를 계산하는 것으로 래핑할 수도 있지만 이것이 시작점입니다.

답변2

괜찮다면 이렇게 하셔도 돼요

for file in $(ls File*); do
  awk '{print $2}' < $file > $file.col2
done
pr -m -s *.col2 > merged.txt
rm -f *.col2

답변3

어쩌면 paste잘 어울리는 것 같나요?

$ paste <(cut -f2 file1) <(cut -f2 file2) <(cut -f2 file3) <(cut -f2 file4)
399     5304317 7526    12455
1908    5305057 8192    14538
4523    5306871 9216    15150
$

관련 정보