File3에 대해 제공된 지침에 따라 간단한 bash 스크립트(sed? awk?)를 사용하여 File1 및 File2의 행을 새 File4에 복사할 수 있습니까?
File1: /*two or more columns, tab delimited*/
AC 456324
DC 689712
GH 123677
KL 236587
File2: /*two or more columns, tab delimited*/
DC AABBC TTYJU
AC DDDEE YYUKI
KL GGHHG QQSSD
File3: /*one column*/
AC
DC
File4 /*tab delimited*/
AC 456324 DDDEE YYUKI
DC 689712 AABBC TTYJU
저는 실제로 Python 사전을 사용하여 이 작업을 수행하고 있는데 간단한 해결 방법을 알고 계시는지 궁금합니다.
참고: 이 질문에는 이미 가장 간단한 형태의 답변이 있습니다.파일을 한 줄씩 병합
답변1
이것은 배열을 사용하여 연결한 더 간단한 사례의 확장입니다.awk
$ awk 'BEGIN{OFS="\t"} NR==FNR {a[$1]=$1;next;} \
$1 in a {k=$1;$1="";a[k]=a[k]$0} END{for (i in a) print a[i]}' File3 File1 File2
AC 456324 DDDEE YYUKI
DC 689712 AABBC TTYJU
와 달리 join
키 필드에 대한 파일을 사전 정렬할 필요가 없습니다.
답변2
명령을 사용하여 공정하게 수행할 수 있습니다 join
.
$ join -j 1 <(sort file3) <(sort file1) > tmp ; \
join -j 1 <(sort tmp) <(sort file2) | sed 's/ /\t/g' > file4
- 나는 처음으로
join
사용한다파일 3그리고파일 1~부터파일 3열쇠가 있습니다. - 이제 위 명령의 출력을 다음과 같이 작성합니다.tmp지금 다시 가입하세요tmp그리고 파일 2.
- 이제 위 명령에 따라 출력이 공백으로 구분된 형식으로 표시됩니다.
sed
귀하의 요구 사항은 탭으로 구분된 형식이므로 모든 공백을 탭으로 바꾸는 명령 에 제공했습니다 .- 마침내 나는 편지를 썼다.파일 4귀하의 요청에 따라.