長い行を含むファイルと参照データを含むファイルがあります。パーロン、フレープ。
私の目標は、特定のフィールドを検索することです。パーロン行はこれを次のすべての値と比較します。フレープ一致する場合は、指定された値に置き換えます。
デフォルトではファイル検索パーロン- 1行 - 異議申し立て4フレープ- すべての行 - フィールド 1.
一致する場合はフィールド 6 をフィールド 2 と比較し、一致する場合はフィールド 4 をフィールド 3 に置き換えます。 1 または 2 が一致しない場合は無視され、変更されません。
パーロン次のデータが含まれています。
Name|location|111|22|333|4444| |6666||8
Name|location| |56|67|| |6666||8
一部のフィールドは空白で、一部のフィールドにはスペースがありますが、すべてのフィールドは「|」で区切られます。
フレープ次のデータが含まれています。
574|5327|1000
22|4444|2000
67|77|3000
返品:
Name|location|111|2000|333|4444| |6666||8
Name|location| |56|67|| |6666||8
私はこれが機能で可能であることを知っていますが、人々がAwkで作業できる複雑さにショックを受けました。だから私はそれを使用しようとしましたが、どの文字列検索/エディタでも機能します。
答え1
あなたの声明によれば、フィールド1と2をキーとしてハッシュ(関連付けの配列)を設定し、フィールド4と6をルックアップキーとして使用しRETURN
たいと思います。Fref
Flong
$ awk -F'|' '
BEGIN{OFS = FS}
NR == FNR {a[$1 FS $2] = $3; next}
$4 FS $6 in a {$4 = a[$4 FS $6]}
1
' Fref Flong
Name|location|111|2000|333|4444| |6666||8
Name|location| |56|67|| |6666||8