![Linux 첫 번째 파일의 한 줄이 두 번째 파일의 여러 줄로 병합되고 비정규화로 바뀌었습니다.](https://linux55.com/image/183458/Linux%20%EC%B2%AB%20%EB%B2%88%EC%A7%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%95%9C%20%EC%A4%84%EC%9D%B4%20%EB%91%90%20%EB%B2%88%EC%A7%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%97%AC%EB%9F%AC%20%EC%A4%84%EB%A1%9C%20%EB%B3%91%ED%95%A9%EB%90%98%EA%B3%A0%20%EB%B9%84%EC%A0%95%EA%B7%9C%ED%99%94%EB%A1%9C%20%EB%B0%94%EB%80%8C%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
파일 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