如何使用相同的标题连接多个文件?有些文件只有标题

时间:2016-10-13 17:57:39

标签: linux bash concatenation

我有大量名为0.file.csv,..,1000.file.csv的文件。我需要连接文件,只保留第一个文件的标题,并摆脱其余文件的标题。我想出的解决方案是:

sudo awk 'FNR==1 && NR!=1{next;}{print}' {0..1000}.file.csv > file.csv

但是,如果某些文件只有标题,则此解决方案不起作用。

示例输入为:

0.file.csv
person_id, dob, year, subject, degree
0,1984/12/01,2014,math,ms

1.file.csv
person_id, dob, year, subject, degree

2.file.csv
person_id, dob, year, subject, degree
200,1990/03/12,2015,physics,bs
201,1991/04/18,2015,math,ms

输出应为:

person_id, dob, year, subject, degree
0,1984/12/01,2014,math,ms
200,1990/03/12,2015,physics,bs
201,1991/04/18,2015,math,ms

3 个答案:

答案 0 :(得分:3)

使用GNU grep:

cat 0.file.csv > file.csv
grep -vh '^person_id, dob, year, subject, degree$' {1..1000}.file.csv >> file.csv

输出到file.csv:

person_id, dob, year, subject, degree
0,1984/12/01,2014,math,ms
200,1990/03/12,2015,physics,bs
201,1991/04/18,2015,math,ms

或使用GNU sed和相同的输出:

cat 0.file.csv > file.csv
sed -sn '2,$p' {1..1000}.file.csv >> file.csv

答案 1 :(得分:1)

这是使用头尾的替代策略:

head -1 0.file.csv > file.csv
tail -qn +2 {0..1000}.file.csv >> file.csv

file.csv的内容:

  

person_id,dob,year,subject,degree
  0,1984 / 12 / 01,2014,数学,MS
  200,1990 / 03 / 12,2015,物理,BS
  201,1991 / 04 / 18,2015,math,ms

答案 2 :(得分:1)

更简单的awk命令:

awk 'FNR>1 || NR==1' {0..1000}.file.csv

但这与原作完全相同(但不依赖于next)。它产生预期的输出,但我不明白为什么你的原始没有。 (当我尝试时它就这样做了。)