awk 'BEGIN {FS = OFS = ";"} FNR == NR {arr[$1] = $0; next} ! ($1 in arr) {print $1, "cost1;cost2;cost3;cost4;0"} END {for (i in arr) {print arr[i]}}' file2 file1
出力は未定義の順序になります(すべての新しい行が最初に印刷されることを除いて)。GNU AWK(gawk
)を使用していて、行を並べ替える必要がある場合は、新しい行をすぐに出力して関数を使用する代わりに、新しい行を配列に保存できますasort()
。それ以外の場合は、外部sort
ユーティリティを使用できます。
複数の行に分かれています:
awk '
BEGIN {
FS = OFS = ";"
}
FNR == NR {
arr[$1] = $0;
next
}
! ($1 in arr) {
print $1, "cost1;cost2;cost3;cost4;0"
}
END {
for (i in arr) {
print arr[i]
}
}' file2 file1
編集:
同じフィールド1を持つfile2の複数の行に対応するには、次の行を変更します。
arr[$1] = $0;
に
arr[$1]
その直後に次の行を追加します。
lines[$0]
次に、次の行を変更します。
for (i in arr) {
print arr[i]
に
for (i in lines) {
print i
編集2:
追加した行を異なる値で10回印刷するには、次のセクションを変更します。
! ($1 in arr) {
print $1, "cost1;cost2;cost3;cost4;0"
}
に
! ($1 in arr) {
for (i = 1; i <= 10; i++) {
print $1, "cost1", i, "cost3;cost4;0"
}
}