使用Shell脚本将多个csv文件附加到单个csv文件中

时间:2019-03-15 23:31:11

标签: shell

我正在尝试将多个csv文件附加到一个文件中。 我如何增强以下脚本,以便添加其他列。我们称之为“标签”。标记中的值应该是附加记录的文件名。

flag=0
for f in $@/*.csv;

do
k=$(wc -l<"$f" )
if [ $flag -eq 0 ];
then
  head -n $k "$f" > out.csv
  flag=1
else

  tail -n +2 "$f" >> out.csv

fi

done

在下面使用@Shawn的方法获取此信息:-

        $ cat TEST1/a.csv 
    h1,h2,h3 
    a,b,c 
    d,e,f 
    $ cat TEST1/b.csv 
    h1,h2,h3 
    1,2,3 
    4,5,6 
    $ awk 'NR == 1 { print $0 ",tag"; next } 
FNR == 1 { next } 
{ print $0 "," FILENAME }' TEST1/a.csv TEST1/b.csv 
    ,tag2,h3 
    ,TEST1/a.csv 
    ,TEST1/a.csv 
    ,TEST1/b.csv 
    ,TEST1/b.csv

1 个答案:

答案 0 :(得分:1)

使用awk这样的事情:

$ cat a.csv  
header1,header2,header3
a,b,c
d,e,f
$ cat b.csv
header1,header2,header3
1,2,3
4,5,6
$ awk 'NR == 1 { print $0 ",tag"; next }
       FNR == 1 { next }
       { print $0 "," FILENAME }' a.csv b.csv
header1,header2,header3,tag
a,b,c,a.csv
d,e,f,a.csv
1,2,3,b.csv
4,5,6,b.csv

这:将第一个文件的第一行视为要打印的标题行,跳过所有其他文件的第一行,并打印所有文件的其余行,并在每个文件的末尾添加一列带有当前文件名的列。