キーとしての列に基づいて2つのファイルをマージし、a.txtの$ 1列に一致させ、$ 3列に基づいてb.txtを追加する方法
a.txt
aa; 2.5; 0.001;
ab; 1.5; 0.003;
ac; 0.4; 0.002;
b.txt
20-Nov-2014; 1775.00; aa;
20-Nov-2014; 1775.00; aa;
20-Nov-2014; 1463.40; ab;
20-Nov-2014; 1463.40; ac;
20-Nov-2014; 1463.40; ab;
Desired output look like this
20-Nov-2014; 1775.00; aa; aa; 2.5; 0.001;
20-Nov-2014; 1775.00; aa; aa; 2.5; 0.001;
20-Nov-2014; 1463.40; ab; ab; 1.5; 0.003;
20-Nov-2014; 1463.40; ac; ac; 0.4; 0.002;
20-Nov-2014; 1463.40; ab; ab; 1.5; 0.003;
Thanks
$ awk -F';' 'FNR==NR{a[$1]=$0;next;} {print $0" " a[substr($3,2)];}' a.txt b.txt
20-Nov-2014; 1775.00; aa; aa; 2.5; 0.001;
20-Nov-2014; 1775.00; aa; aa; 2.5; 0.001;
20-Nov-2014; 1463.40; ab; ab; 1.5; 0.003;
20-Nov-2014; 1463.40; ac; ac; 0.4; 0.002;
20-Nov-2014; 1463.40; ab; ab; 1.5; 0.003;
awk
ファイルのすべての行を暗黙的にループします。各行はフィールドに分割されています。
-F';'
これはawk
、フィールド区切り文字としてセミコロンを使用するように指示します。
FNR==NR{a[$1]=$0;next;}
NRはこれまでに読み込まれた行数であり、FNRは現在のファイルからこれまでに読み込まれた行数です。したがって、の場合FNR==NR
、まだ最初のファイルを読み取っていますa.txt
。その場合、このセットは、読み込まれたばかりの行全体を、キー、3番目のフィールドの下の$0
配列に割り当てます。a
$1
next
告げるawk
以下のコマンドの残りの部分をスキップして次の行にジャンプして最初からやり直します。
print $0" " a[substr($3,2)]
ここに到達した場合、それは2番目のファイルで作業していることを意味しますb.txt
。その場合、このファイルの各行に続いてa
、3番目のフィールドに一致するキーを持つ配列からの行を出力します。
ファイルb.txt
では、3番目のフィールドはスペースで始まります。配列a
でこのフィールドを検索すると、そのスペースはsubstr
関数で削除されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加