我尝试编写AWK脚本以使用新csv文件的值更新csv文件,以便更新现有行的详细信息,但保留新csv中不存在的行。我认为可以通过制作一个(NR == FNR)的索引来完成,但我还没有设法让任何东西工作。这是应该工作的:
old.csv
Name Size Date
==================
A 20mb 1/10
B 10mb 1/10
new.csv
Name Size Date
==================
A 24mb 2/10
C 30mb 2/10
(有些脚本,可能是AWK?)
output.csv
Name Size Date
==================
A 24mb 2/10
B 10mb 1/10
C 30mb 2/10
关于如何实现这一目标的任何想法?可以使用除AWK之外的其他东西,但它必须在最小的AIX设置上工作
由于
答案 0 :(得分:2)
$ cat old
Name Size Date
==================
A 20mb 1/10
B 10mb 1/10
$ cat new
Name Size Date
==================
A 24mb 2/10
C 30mb 2/10
$ awk 'FNR<3{if(FNR==NR)print;next}{a[$1]=$0}END{for(i in a)print a[i]}' old new
Name Size Date
==================
A 24mb 2/10
B 10mb 1/10
C 30mb 2/10
<强>解释强>
awk '
FNR<3{ # this is for skipping first 2 lines
if(FNR==NR)print; # FNR==NR is true only when awk reads first file
next # go to next line
}
{
a[$1]=$0 # array a where index being first field and value being current record/line/row
}
END{ # end block we print array a contents
for(i in a)print a[i]
}
' old new
答案 1 :(得分:1)
在awk中。阅读数组t.tag = Tree_Branch;
t.payload.Leaf.x = 42;
中的所有旧记录,同时打印与Tree
中的旧记录匹配的新记录a
以及delete
打印任何现有旧记录:
a
订单将丢失。