파일 1과 파일 2의 이름을 다음 형식으로 지정해야 합니다.
파일 1에는 18000줄이 있습니다.
COL1 COL2 COL3 COL4 COL5
- . ID = tom_fa_10005086
- 0 Parent = tom_fa_10005086
- 0 Parent = tom_fa_10005086
- 2 Parent = tom_fa_10005086
- 1 Parent = tom_fa_10005086
- 0 Parent = tom_fa_10005086
- 0 Parent = tom_fa_10005086
+ . ID = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 2 Parent = tom_fa_10013928
+ 2 Parent = tom_fa_10013928
+ 1 Parent = tom_fa_10013928
+ 1 Parent = tom_fa_10013928
+ 2 Parent = tom_fa_10013928
+ 2 Parent = tom_fa_10013928
- . ID = tom_fa_10000024
- 0 Parent = tom_fa_10000024
- . ID = tom_fa_10004587
- 0 Parent = tom_fa_10004587
- 1 Parent = tom_fa_10004587
- 1 Parent = tom_fa_10004587
+ . ID = tom_fa_10018753
+ 0 Parent = tom_fa_10018753
+ 2 Parent = tom_fa_10018753
+ 2 Parent = tom_fa_10018753
+ 0 Parent = tom_fa_10018753
+ . ID = tom_fa_10007441
+ 0 Parent = tom_fa_10007441
+ 0 Parent = tom_fa_10007441
+ 1 Parent = tom_fa_10007441
+ 0 Parent = tom_fa_10007441
+ 1 Parent = tom_fa_10007441
+ 2 Parent = tom_fa_10007441
그리고 파일 2
COL 1 COL 2
tom_fa_10005086 ABI3VP1
tom_fa_10013928 ABI3VP2
tom_fa_10000024 Alfin-like
tom_fa_10011338 C2C2-Dof
tom_fa_10003474 C2C2-Gata
tom_fa_10003291 C2H2
tom_fa_10007064 C2H2
tom_fa_10008972 C2H2
tom_fa_10009025 C2H2
tom_fa_10005726 C3H
tom_fa_10011317 C3H
tom_fa_10010708 CPP
tom_fa_10002138 E2F-DP
tom_fa_10009443 G2-like
tom_fa_10008970 GRAS
내가 하고 싶은 일은 (파일 1)의 열 5와 열 1(파일 2)이 동일한 경우 열 2(파일 2)에 해당하는 파일 1의 열 6에 추가하는 것입니다.
그래서 그것은 다음과 같습니다
- . ID = tom_fa_10005086 ABI3VP1
- 0 Parent = tom_fa_10005086 ABI3VP1
- 0 Parent = tom_fa_10005086 ABI3VP1
- 2 Parent = tom_fa_10005086 ABI3VP1
- 1 Parent = tom_fa_10005086 ABI3VP1
- 0 Parent = tom_fa_10005086 ABI3VP1
- 0 Parent = tom_fa_10005086 ABI3VP1
+ . ID = tom_fa_10013928 ABI3VP2
+ 0 Parent = tom_fa_10013928 ABI3VP2
+ 0 Parent = tom_fa_10013928 ABI3VP2
+ 0 Parent = tom_fa_10013928 ABI3VP2
+ 0 Parent = tom_fa_10013928 ABI3VP2
+ 2 Parent = tom_fa_10013928 ABI3VP2
+ 2 Parent = tom_fa_10013928 ABI3VP2
+ 1 Parent = tom_fa_10013928 ABI3VP2
+ 1 Parent = tom_fa_10013928 ABI3VP2
+ 2 Parent = tom_fa_10013928 ABI3VP2
+ 2 Parent = tom_fa_10013928 ABI3VP2
- . ID = tom_fa_10000024 Alfin-like
- 0 Parent = tom_fa_10000024 Alfin-like
- . ID = tom_fa_10004587
- 0 Parent = tom_fa_10004587
- 1 Parent = tom_fa_10004587
- 1 Parent = tom_fa_10004587
+ . ID = tom_fa_10018753
+ 0 Parent = tom_fa_10018753
+ 2 Parent = tom_fa_10018753
+ 2 Parent = tom_fa_10018753
+ 0 Parent = tom_fa_10018753
+ . ID = tom_fa_10007441
+ 0 Parent = tom_fa_10007441
+ 0 Parent = tom_fa_10007441
+ 1 Parent = tom_fa_10007441
+ 0 Parent = tom_fa_10007441
+ 1 Parent = tom_fa_10007441
+ 2 Parent = tom_fa_10007441
fgrep -f file 2 file1을 사용해 보았지만 열 2 file2의 정보를 병합하는 방법을 모르고 문자열이 동일하지 않습니다.
답변1
한 번에 수행하려면 다음 sed
스크립트가 작동합니다.
sed '/^[^ ]* [^ ]*$/{H;d;};G;s/ \([^ ]*\)\n.*\n\1 \([[:print:]]*\).*/ \1 \2/;P;d' file2 file1
그것은 무엇을 합니까? file2
예약된 공간의 모든 행을 일종의 조회 테이블로 수집한 다음 해당 테이블을 패턴 공간의 각 행에 추가하고 패턴이 발견되면 6번째 열을 추가합니다. 상세히:
/^[^ ]* [^ ]*$/
{}
두 개의 열이 있는 행을 일치시키려면 해당 열에 대해서만 다음 명령을 실행합니다(내부 명령{H;d;}
이 줄을 예약된 공간에 추가하고 해당 줄의 추가 처리를 중지하므로 나머지 스크립트는 다음 줄에 대해서만 실행됩니다.file1
G
패턴 공간에 조회 테이블이 있는 예약된 공간을 추가합니다.s/ \([^ ]*\)\n.*\n\1 \([[:print:]]*\).*/ \1 \2/
일치 항목에 여섯 번째 열을 추가할지 여부P
첨부된 테이블 없이 행 인쇄d
다른 출력 억제(옵션도-n
동일한 작업을 수행함)
답변2
다음 명령을 사용해보십시오. 잘 작동합니다.
Step1
awk 'NR==FNR{a[$5];next}($1 in a){print $0}' file1 file2 > u.txt
count=`awk '{print NR}' u.txt | sort -nr| sed -n '1p'`
step2
for ((i=1;i<=$count;i++)); do h=`awk -v i="$i" 'NR==i{print $1}' u.txt`; j=`awk -v i="$i" 'NR==i{print $2}' u.txt `; awk -v h="$h" -v j="$j" '$5 == h {$6=j;print $0}' file1; done >file3.txt
step3
awk 'NR==FNR{a[$1];next}!($5 in a){print $0}' file2 file1 >file4.txt
Step4(Final output)
awk '{print $0}' file3.txt file4.txt
- . ID = tom_fa_10005086 ABI3VP1
- 0 Parent = tom_fa_10005086 ABI3VP1
- 0 Parent = tom_fa_10005086 ABI3VP1
- 2 Parent = tom_fa_10005086 ABI3VP1
- 1 Parent = tom_fa_10005086 ABI3VP1
- 0 Parent = tom_fa_10005086 ABI3VP1
- 0 Parent = tom_fa_10005086 ABI3VP1
+ . ID = tom_fa_10013928 ABI3VP2
+ 0 Parent = tom_fa_10013928 ABI3VP2
+ 0 Parent = tom_fa_10013928 ABI3VP2
+ 0 Parent = tom_fa_10013928 ABI3VP2
+ 0 Parent = tom_fa_10013928 ABI3VP2
+ 2 Parent = tom_fa_10013928 ABI3VP2
+ 2 Parent = tom_fa_10013928 ABI3VP2
+ 1 Parent = tom_fa_10013928 ABI3VP2
+ 1 Parent = tom_fa_10013928 ABI3VP2
+ 2 Parent = tom_fa_10013928 ABI3VP2
+ 2 Parent = tom_fa_10013928 ABI3VP2
- . ID = tom_fa_10000024 Alfin-like
- 0 Parent = tom_fa_10000024 Alfin-like
- . ID = tom_fa_10004587
- 0 Parent = tom_fa_10004587
- 1 Parent = tom_fa_10004587
- 1 Parent = tom_fa_10004587
+ . ID = tom_fa_10018753
+ 0 Parent = tom_fa_10018753
+ 2 Parent = tom_fa_10018753
+ 2 Parent = tom_fa_10018753
+ 0 Parent = tom_fa_10018753
+ . ID = tom_fa_10007441
+ 0 Parent = tom_fa_10007441
+ 0 Parent = tom_fa_10007441
+ 1 Parent = tom_fa_10007441
+ 0 Parent = tom_fa_10007441
+ 1 Parent = tom_fa_10007441
+ 2 Parent = tom_fa_10007441