awk를 사용하여 한 파일의 열을 다른 파일의 마지막 열에 추가하는 방법은 무엇입니까?

awk를 사용하여 한 파일의 열을 다른 파일의 마지막 열에 추가하는 방법은 무엇입니까?

file2알 수 없는 개수의 열이 포함된 두 번째 열을 에 추가하여 file1이 열이 의 마지막 열이 되도록 하려고 합니다 file1. 이를 위해 a 와 두 번째 열만 file3붙여넣어 조합을 만들어 보았습니다 .file1file2

file1:

col11  col12  col13  ...  col1n

file2:

col21  col22  col23  ...  col2m

새로운 file1또는 file3:

col11 col12  ...  col1n  col22

나는 다음 명령을 사용하고 있습니다 :

awk '{ print $0 > "file3"; getline<"file2"; print $2 > "file3" }' file1 &

그러나 col22에 대한 인수는 새 파일의 마지막 열을 형성하는 대신 래핑됩니다.

오류를 찾고 수정하거나 보다 효율적인 솔루션을 찾는 데 도움을 줄 수 있는 사람이 있습니까?
내 운영 체제는 fedora12입니다.

답변1

awk '{f1 = $0; getline<"file2"; print f1, $2}' < file1 > file3

출력 파일에는 동일한 수의 행이 있으므로 file1마지막 행의 마지막 열이 더 짧으면 비어 있고, 더 길면 file2마지막 값이 무시됩니다.file2

또는 Costas가 제안한 것처럼:

awk '{getline f1 <"file1" ; print f1,$2}' < file2 > file3

하지만 그때까지는 file3행 수가 동일해집니다 file2. 즉 file2, 이보다 길면 열 순서가 영향을 받습니다 file1.

그리고:

awk '{print $2}' < file2 | paste file1 - > file3

file3file1합계에서 가장 큰 행 수와 동일한 수의 행을 갖게 됩니다 file2. 데이터는 삭제되지 않지만 위에서 언급한 것처럼 마지막 행이 . file2보다 길면 file1첫 번째/두 번째 열의 데이터가 포함됩니다 file3.file2

답변2

노력하다

$ awk 'NR==FNR{a[NR]=$2;next}{print $0,a[FNR]}' file2 file1
col11 col12 col13 ... col1n col22

{a[NR]=$2;next}부분은 목록의 첫 번째 파일( )에 대해서만 실행되며 , 두 번째 파일( )을 처리할 file2때 전체 줄을 인쇄하고 두 번째 필드 값을 포함하는 테이블 요소를 추가합니다 .awkfile1file1a[FNR]file2

관련 정보