첫 번째 파일을 반복하고 AWK를 사용하여 두 번째 파일의 모든 행 옆에 첫 번째 파일의 각 행을 인쇄하는 방법은 무엇입니까?

USC

여기 내가 달성하려는 작업의 예가 있습니다.

파일 1 :

Adam
John
Tim

파일 2 :

,2018-2-1301
,2018-3-1379
,2018-1-3809
,2018-2-5801

산출:

Adam,2018-2-1301
Adam,2018-3-1379
Adam,2018-1-3809
Adam,2018-2-5801
John,2018-2-1301
John,2018-3-1379
John,2018-1-3809
John,2018-2-5801
Tim,2018-2-1301
Tim,2018-3-1379
Tim,2018-1-3809
Tim,2018-2-5801

감사!

Kusalananda
$ awk 'NR == FNR { names[$1]; next }
                 { for (name in names) printf("%s%s\n", name, $0) }' file1 file2
Adam,2018-2-1301
Tim,2018-2-1301
John,2018-2-1301
Adam,2018-3-1379
Tim,2018-3-1379
John,2018-3-1379
Adam,2018-1-3809
Tim,2018-1-3809
John,2018-1-3809
Adam,2018-2-5801
Tim,2018-2-5801
John,2018-2-5801

이것은 awk첫 번째 파일 (세 개의 이름을 가진 파일)을 연관 배열 (키로)으로 읽는 데 사용 됩니다. 두 번째 파일을 읽을 때 두 번째 파일의 각 줄은 이전에 읽은 각 이름과 함께 반복적으로 출력됩니다.

NR == FNR우리가 첫 번째 파일에서 읽고 있다면 테스트는 사실이다. 현재 파일의 레코드 번호로 전체 레코드 번호 ( "줄 번호")를 테스트합니다.


다음 같이 GNU 교차 조인 할 수도 있습니다 join.

$ join -j 99 -o1.1,2.1 file[12]
Adam ,2018-2-1301
Adam ,2018-3-1379
Adam ,2018-1-3809
Adam ,2018-2-5801
John ,2018-2-1301
John ,2018-3-1379
John ,2018-1-3809
John ,2018-2-5801
Tim ,2018-2-1301
Tim ,2018-3-1379
Tim ,2018-1-3809
Tim ,2018-2-5801

... 어디에 99두 파일에 존재하지 않는 필드가 있습니다.

이 예에서 삽입 된 공간은를 통해 결과를 파이프하여 제거 할 수 있습니다 tr -d ' '.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관