使用AWK更新CSV文件

时间:2017-04-10 04:24:52

标签: bash csv awk

我尝试编写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设置上工作

由于

2 个答案:

答案 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

订单将丢失。