首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编写特定csv行的Bash脚本

编写特定csv行的Bash脚本
EN

Stack Overflow用户
提问于 2016-07-14 11:47:30
回答 3查看 117关注 0票数 0

我是另一个编写脚本的新手(刚刚发现了,这让我大吃一惊!)我想要做的是有一个脚本,将大量的.csv文件编译成一个bigfile.csv,移除头,并插入我自己的头。我发现了以下解决方案:

代码语言:javascript
运行
复制
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文件中取线?

编辑:谢谢你的帮助,伙计们,这很有魅力!不幸的是,里面还有一些奇怪的数据

代码语言:javascript
运行
复制
CParserError: Error tokenizing data. C error: Expected 51 fields in line 6589, saw 54

有一个简单的调整,是否有办法再次只采取线与51个字段?

EN

Stack Overflow用户

发布于 2016-07-14 11:57:41

一条花哨的单线邮轮会想:-

代码语言:javascript
运行
复制
awk -F',' 'NR > 1 && $1 ~ /^MD/ && NF == 51 { print }' *.csv > /someotherpath/bigfile.csv

使用完整的bash脚本的适当方法应该是类似于类似的东西,而不是花哨的一行:-

代码语言:javascript
运行
复制
#!/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

解决方案的关键是使用awkNR & NF变量,该变量跟踪行内的当前行和nth字段,因此理想情况下,NR > 1将跳过正在处理的标题部分,$1 ~ /^MD/只返回第一列以模式开头的行,NF ==51打印包含51个字段的行。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38373385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档