새 열 만들기

새 열 만들기


이 파일 과 같은 두 개의 입력 파일이 있습니다1

 a  1 
 b  2 
 c  3 
 d  4 

파일 2

 a
 a
 b
 c
 c
 c
 d 
 d

다음 출력을 얻기 위해 쉘 스크립트를 어떻게 만들 수 있습니까?

 a  1 
 a  1 
 b  2 
 c  3 
 c  3 
 c  3 
 d  4 
 d  4

붙여넣기 방식을 시도해 보았는데, 알파벳과 맞지 않는 순서로 해당 숫자만 붙여넣습니다. 어떤 지침이라도 감사하겠습니다.

답변1

두 파일이 모두 첫 번째 열을 기준으로 정렬되어 있다고 가정합니다.

$ join file1 file2
a 1
a 1
b 2
c 3
c 3
c 3
d 4
d 4

유틸리티가 join실행됩니다.관계형 INNER JOIN 연산두 개의 입력 파일에 대해. 기본적으로 첫 번째 열은 조인 열입니다.필요이 열을 정렬하세요.

답변2

awk를 사용하여 첫 번째 파일을 배열로 읽고 두 번째 파일을 기반으로 인쇄합니다. 여기에서는 입력을 정렬할 필요가 없습니다.

$ awk 'FNR==NR { a[$1] = $2; next } { print $1, a[$1] }' file1 file2
a 1
a 1
b 2
c 3
c 3
c 3
d 4
d 4

답변3

이를 달성하기 위해 쉘 스크립트가 실제로 필요하다고 생각하지 않지만 원하는 경우(예: 조인, grep 등이 없는 경우) 내장 스크립트만 필요합니다.

#you should not have spaces in start of file1.txt or file2.txt
search_first_col(){ 
         while read -r col nextcol ; do 
            case $col in "$1") 
                    echo "$col $nextcol" ;; 
            esac 
         done 
       }
while IFS= read -r lin ; do 
       search_first_col "$lin" </tmp/file1.txt
done </tmp/file2.txt

답변4

밀러(https://github.com/johnkerl/miller/releases)

mlr --nidx --fs " " join -j 1 -f file2 file2

당신은

a 1
a 1
b 2
c 3
c 3
c 3
d 4
d 4

관련 정보