두 개의 개별 파일에서 열 병합 파일을 만드는

awk를 사용하여 두 개의 개별 파일에서 선택적 열을 병합하는 새 파일을 만드는 방법은 무엇입니까? BOTH 파일의 요소 순서를 망치지 않고.

예 : 파일 3에는 파일 1의 열 1,2,3과 파일 2의 열 4가 포함될 수 있습니다.

File 1
A   23  8   T
A   63  9   9
B   45  3   J

File 2
A   0
A   6   
B   5

File 3
A   23  8   0
A   63  9   6
B   45  3   5


답변

이 시도:

$ awk 'FNR==NR{a[FNR]=$2;next};{$NF=a[FNR]};1' file2 file1
A 23 8 0
A 63 9 6
B 45 3 5

답변

이를위한 전용 도구가 있습니다 : paste. 첫 번째 파일의 각 전체 행을 두 번째 파일의 해당 행과 연결합니다. 이전 또는 이후에 원하지 않는 열을 제거 할 수 있습니다. 예를 들어 열이 탭으로 구분되어 있다고 가정합니다.

paste file1.txt file2.txt | cut -f 1,2,3,6

다음은 ksh / bash / zsh 프로세스 대체에 의존하는 두 파일을 사전 필터링하는 방법입니다.

paste <(<file1.txt sed 's/[[:space:]][[:space:]]*[^[:space:]]*$//') \
      <(<file1.txt sed 's/^[^[:space:]]*[[:space:]][[:space:]]*//')

Awk는 주로 한 번에 하나의 파일을 처리하도록 설계되었지만 getline다른 파일에서 병렬로 읽을 수 있습니다 .

awk '
  BEGIN {file2=ARGV[2]; ARGV[2]="";}
  {$0 = $0 ORS getline(); print $1, $2, $3, $6;}
' file1.txt file2.txt

지금까지 파일 1의 1 행을 파일 2의 1 행과 일치시키고, 파일 1의 2 행을 파일 2의 2 행과 일치시키고 싶다고 가정했습니다. 열의 내용을 일치 시키려면 완전히 다른 문제. join일치하려는 열이 정렬되어 있으면 작업을 수행합니다.