我正在尝试将多个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
答案 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
这:将第一个文件的第一行视为要打印的标题行,跳过所有其他文件的第一行,并打印所有文件的其余行,并在每个文件的末尾添加一列带有当前文件名的列。