답변:
결합 사용하기 :
join -1 1 -2 2 -a1 -e0 -o'0,1.2,2.1' file2 file1
join 명령은 공통 데이터 필드를 공유하는 두 파일의 행을 결합합니다. 이 경우 : file2의 필드 1 ( -1 1
)과 file1의 필드 2 ( )를 사용하여 file2와 -2 2
file1을 결합하십시오.
출력 될 것이다 : "필드 접합, 파일 2의 필드 2, 필드 FILE1 1"( -o'0,1.2,2.1'
), 누락 필드가 0을 넣어있을 경우 ( -e0
)
두 파일 중 하나에 더 많은 레코드가있는 경우 해당 파일을 추가하십시오 (이 경우 file2) ( -a1
)
join 명령 맨 페이지를 참조하십시오
약간의 awk
마술 :
awk 'FNR==NR{a[$2]=$1;next}{if(a[$1]==""){a[$1]=0}; \
printf "%s%s%s%s%s\n",$1,FS,$2,FS,a[$1]}' \
file1 file2
또는
awk 'FNR==NR{a[$2]=$1;next}{if(a[$1]==""){a[$1]=0};
print $1,$2,a[$1]}' file1 file2
산출
111 x1 a
222 x2 b
333 x3 c
444 x4 0
555 x5 0
666 x6 d
777 x7 e
888 x8 0
설명
FNR==NR{a[$2]=$1;next}
file1
( FNR==NR
)를 초과 하여 키-값 구조를 만듭니다. 키는의 두 번째 열 ( $2
)이고 file1
값은 첫 번째 열 ( $1
)입니다.file1
{if(a[$1]==""){a[$1]=0};print $1,$2,a[$1]}
통해 실행 file2
및
if(a[$1]==""){a[$1]=0}
첫 번째 열에 키 (경우 $1
에이) file2
에 존재하지 않는 file1
, 우리는 필요0
print $1,$2,a[$1]
인쇄 (하여 print
제 번째 열) file2
과 첫 번째 열의 키 (키와 값 구조 값 $1
의)을file2
또는
printf "%s%s%s%s%s\n",$1,FS,$2,FS,a[$1]}'
printf
의 첫 번째 및 두 번째 열과 file2
키-값 구조의 값을 첫 번째 열의 키 ( $1
)로 인쇄 (사용 )합니다 file2
.
FS
입력 파일에서 가져온 열 사이의 구분 기호입니다.
"%s%s%s%s%s\n"
출력 형식입니다
%s
-문자열
\n
– 줄 바꿈
q 사용 :
$ q "select f2.c1, f2.c2, ifnull(f1.c1,0) from file_2.txt f2 LEFT JOIN file_1.txt f1 on f1.c2 = f2.c1 "
111 x1 a
222 x2 b
333 x3 c
444 x4 0
555 x5 0
666 x6 d
777 x7 e
888 x8 0
때때로 이런 식으로 더 읽기 쉽습니다.
q
은 패키지 python3-q-text-as-data
(Python 3)와 패키지 python-q-text-as-data
(Python 2)에 있습니다.
q
패키지 는 어디서 구할 수 있습니까? 나도 설치할 수하지 않는 것 python-q-text-as-data
또는 python3-q-text-as-data
. "E : python3-q-text-as-data 패키지를 찾을 수 없습니다". 내 시스템이 이미 설치되어 python
, python2.7
, python3
,와 python3.4
.
-e0
하지 않으면 perl이 필요하지 않습니다 :)