我有大量名为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
答案 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
)。它产生预期的输出,但我不明白为什么你的原始没有。 (当我尝试时它就这样做了。)