我是另一个编写脚本的新手(刚刚发现了,这让我大吃一惊!)我想要做的是有一个脚本,将大量的.csv文件编译成一个bigfile.csv,移除头,并插入我自己的头。我发现了以下解决方案:
awk 'FNR > 1' *.csv > bigfile.csv
sed -i 1i"Ident - MD,Node ID,Date,Time,Sub Seq#,NO2..." bigfile.csv太棒了!但是,当我尝试使用这个文件进行分析时,我会因为行差而得到错误。我看了一下,确实,里面有一些疯狂的条目。
幸运的是,我希望从原始.csv文件中得到的每一行都有第一列"MD“条目。那么,有谁知道我如何告诉awk只从第一个单元格中包含"MD“的.csv文件中取线?
编辑:谢谢你的帮助,伙计们,这很有魅力!不幸的是,里面还有一些奇怪的数据
CParserError: Error tokenizing data. C error: Expected 51 fields in line 6589, saw 54有一个简单的调整,是否有办法再次只采取线与51个字段?
发布于 2016-07-14 11:57:41
一条花哨的单线邮轮会想:-
awk -F',' 'NR > 1 && $1 ~ /^MD/ && NF == 51 { print }' *.csv > /someotherpath/bigfile.csv使用完整的bash脚本的适当方法应该是类似于类似的东西,而不是花哨的一行:-
#!/bin/bash
# Am assuming the the '.csv' files are a single ',' separated
for i in *.csv; do
[ -e "$i" ] || continue # To handle when no input *.csv files present
awk -F',' 'NR > 1 && $1 ~ /^MD/ && NF == 51 { print }' "$i" > /someotherpath/bigfile.csv
done解决方案的关键是使用awk的NR & NF变量,该变量跟踪行内的当前行和nth字段,因此理想情况下,NR > 1将跳过正在处理的标题部分,$1 ~ /^MD/只返回第一列以模式开头的行,NF ==51打印包含51个字段的行。
https://stackoverflow.com/questions/38373385
复制相似问题