F1
次の形式で、1行に8つのフィールドを持つ17k行の長さのファイルがあります。
id1 field2 field3 field4 field5 field6 field7 field8
id2 field2 field3 field4 field5 field6 field7 field8
2番目のファイルのF2
内容は、行(列)ごとに単一のフィールドに展開されます。
id1
uuuuuuu
bbbbbbb
aaaaaaa
id2
ttttttt
qqqqqqq
...
一致するものがある場合は、from行をF2
from行に置き換える必要があります。以下の奇妙なwhileループが機能すると思いましたが、言うまでもなく毎回変更されF1
たすべての行を返します。F2
それとも、Bashにこれを行うための別の魔法のツールがありますか?
while read id1 id2 id3 id4 id5; do
while read ID; do
if [[ $ID == "$id1" ]]; then
sed "s/$ID/$id1 $id2 $id5 $id4/" F2 && break
fi
done < F2
done < F1
ベストアンサー1
これは仕事です。アッ
awk 'NR == FNR {line[$1] = $0; next} $1 in line {$0 = line[$1]} 1' F1 F2
NR == FNR {line[$1] = $0; next}
- 読み込み時にF1
最初のフィールドに入力された各行を保存します。$1 in line {$0 = line[$1]}
-F2
今読んでいます。最初のフィールドが配列にある場合は、line
配列の値を現在のレコードに置き換えます。1
- 現在のレコードを印刷します。