Linux 첫 번째 파일의 한 줄이 두 번째 파일의 여러 줄로 병합되고 비정규화로 바뀌었습니다.

Linux 첫 번째 파일의 한 줄이 두 번째 파일의 여러 줄로 병합되고 비정규화로 바뀌었습니다.

파일 1

Group   Country Lang
IT      USA     ENG

파일_2

EMPID   STOREID
1001    1400
1002    1401
1003    1401

내가 사용한다면

paste -d'\t' File_1 File_2

알겠어요

Group^ICountry^ILang^IEMPID^ISTOREID$
IT^IUSA^IENG^I1001^I1400$
^I1002^I1401$   
^I1003^I1401$

내가 이런 것을 얻으려고 할 때

Group   Country Lang    EMPID   STOREID
IT  USA ENG     1001    1400
IT  USA ENG     1002    1401
IT  USA ENG     1003    1401

제안해주세요

답변1

$ awk -v OFS='\t' 'NR==FNR{a[FNR==1]=$0; next} {print a[FNR==1], $0}' file1 file2
Group   Country Lang    EMPID   STOREID
IT      USA     ENG     1001    1400
IT      USA     ENG     1002    1401
IT      USA     ENG     1003    1401

위의 내용은 "파일의 첫 번째 줄입니다"( ) 비교 결과 1 또는 0을 사용하여 배열의 색인을 생성하므로 FNR==1파일 1의 첫 번째 줄은 파일 2와 연결되고 파일 2의 다른 모든 줄은 다음과 연결됩니다. 파일 1 인덱스 0의 두 번째 줄. 어떤 awk에서도 같은 방식으로 동작합니다.

답변2

awk이 작업 에 사용할 수 있습니다 .

awk '
    FNR == NR {buf[NR] = $0; next} 
    {print (FNR==1 ? buf[1] : buf[2]) "\t" $0}
' file1 file2

첫 번째 파일( )을 구문 분석할 때 헤더와 줄을 저장 FNR==NR하고 두 번째 파일의 각 줄과 함께 적절한 접두사를 인쇄합니다.

산출:

Group   Country Lang    EMPID   STOREID
IT      USA     ENG 1001    1400
IT      USA     ENG 1002    1401
IT      USA     ENG 1003    1401

답변3

GNU awk를 사용하여 다음 줄을 시도해 보세요.

$ awk 'FNR==NR {a[NR]=$0;nrow=FNR;next} NR==nrow+1 {print a[1],$0;next} {print a[2],$0}' data1 data2

Group   Country Lang EMPID   STOREID
IT      USA     ENG 1001    1400
IT      USA     ENG 1002    1401
IT      USA     ENG 1003    1401

그리고:

$ cat data1
Group   Country Lang
IT      USA     ENG
$ cat data2
EMPID   STOREID
1001    1400
1002    1401
1003    1401

관련 정보