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
编辑:
要在 file2 中容纳具有相同字段 1 的多行,请更改此行:
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"
}
}