ファイル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番目の列を追加します。詳細:
/^[^ ]* [^ ]*$/
{}
2つの列を持つ行を一致させるには、その列に対してのみ次のコマンドを実行します(内部コマンド{H;d;}
この行を予約済みスペースに追加し、その行の追加処理を停止するため、残りのスクリプトは次の行に対してのみ実行されます。file1
G
パターンスペースにルックアップテーブルを含む予約済みスペースを追加します。s/ \([^ ]*\)\n.*\n\1 \([[:print:]]*\).*/ \1 \2/
一致に 6 番目の列を追加するかどうか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