awk - 根据csv文件的列值过滤行
问题描述
我有一个包含 1000 行和 10 列的数据集。这是示例数据集
A,B,C,D,E,F,
a,b,c,d,e,f,
g,h,i,j,k,l,
m,n,o,p,q,r,
s,t,u,v,w,x,
从这个数据集中,我想将 A 列的值为“a”或“m”的行复制到一个新的 csv 文件中。我也希望标题被复制。
我尝试过使用 awk。它复制了所有行,但没有复制标题。
awk '{$1~/a//m/ print}' inputfile.csv > outputfile.csv
如何将标头也复制到新的 outputfile.csv 中?
提前致谢。
解决方案
考虑到您的标题将位于第一行,您能否尝试以下操作。
awk 'BEGIN{FS=OFS=","} FNR==1{print;next} $1 ~ /^a$|^m$/' Input_file > outputfile.csv
或者根据赛勒斯先生的评论添加以下内容:
awk 'BEGIN{FS=OFS=","} FNR==1{print;next} $1 ~ /^(a|m)$/' Input_file > outputfile.csv
或者根据 Ed sir 的评论,尝试以下操作:
awk -F, 'NR==1 || $1~/^[am]$/' Input_file > outputfile.csv
在 OP 的尝试中添加了更正:
- 由于行是逗号分隔的,因此为所有行添加了
FS
和此处。OFS
,
- 添加
FNR==1
了条件,这意味着它在这里检查第一行并简单地打印它,因为我们想在输出文件中打印标题。它将打印第一行,然后next
从这里跳过所有进一步的语句。 - 使用更好的正则表达式来检查第一个字段的条件
$1 ~ /^a$|^m$/
推荐阅读
- sql - 为什么使用 nativeSQL 休眠会返回与 SQL 不同的结果
- python - 如何从范围内替换 CSV 列中的值?
- python - Tkinter 现代对话框突然无法正常工作
- dart - 如何在 App Sync 中动态取消订阅
- flutter - 如何在 BottomSheet 内的 Column 内滚动 ListView
- angular - Angular:如何更改 ngFor 中组件的属性值
- dataframe - 无法从 Hive 表中读取 (PySpark)
- javascript - HTML5 Scripting postmessage
- c++ - SDL2/SDL2_TTF : 直接在屏幕上绘制文本
- ios - 快速平移手势显示奇怪的视觉行为