다른 파일의 열을 병합하려면 awk에 명령을 입력하세요.

다른 파일의 열을 병합하려면 awk에 명령을 입력하세요.

예를 들어 file.txt가 있습니다(각 행마다 열 수가 다릅니다).

1 2 3 4
5 5 6 
7 7 7 7 9 10

2개의 열이 포함된 다른 파일(file2.txt)이 있습니다.

    a b
    c d
    e f

나는 다음 명령을 사용합니다.

awk '{print $1,$(cut -f2 file2.txt)}' file.txt > final.txt

file2.txt의 두 번째 열을 가져와서 file1.txt의 열 1과 열 2 사이에 추가하고 싶습니다.

전임자. 결과:

1 d 2 3 4 
5 d 5 6
7 f 7 7 7 9 10

또한 file1.txt의 나머지 모든 열을 유지하고 싶습니다.

답변1

순수한 awk:

awk '
    FNR==NR{c[NR]=$2}
    FNR!=NR{$1 = $1 OFS c[FNR]; print}
' file2 file

산출:

1 b 2 3 4 
5 d 5 6 
7 f 7 7 7 9 10

답변2

조금 잘라서 붙여넣는 건 어때요?

paste -d" " <(cut -d" " -f1 file1.txt) <(cut -d" " -f2 file2.txt) <(cut -d" " -f2- file1.txt)

답변3

awk의 일부 구현에서는 파이프된 하위 프로세스 1 에서 읽기를 허용하지만 , 이 경우 두 번째 파일에서 전체 줄을 읽고 awk 내에서 필드 분할을 수행하는 것이 좋습니다.

$ awk '(getline line < "file2.txt") > 0 {split(line,a); $1 = $1 FS a[2]} 1' file1.txt
1 b 2 3 4
5 d 5 6
7 f 7 7 7 9 10

또는 awk를 완전히 피하고 pasteand 사용하는 것을 고려할 수 있습니다.cut


  1. 예를 들어 참조하십시오.파이프에서 getline 사용하기

답변4

다음 명령을 사용해보십시오

awk 'FNR==NR{b[FNR]=$2;next}{print $1,b[FNR],$2,$3,$4,$5,$6,$7}' file2.txt  file1.txt 

관련 정보