【发布时间】:2019-09-22 06:20:44
【问题描述】:
我有一个 csv 文件,我想在特定列 columnB(我的数据集中的第 5 列)中搜索一个字符串(忽略大小写),并在另一个columnC(我的数据集中的第 10 列)上应用过滤器.然后将选定的列保存到文件中。
数据集样本
columnA columnB columnC columnD
abc Apple 100 today
nbd apple 50 tomorrow
ccc apple 101 today
想要的输出
columnB columnC
Apple 100
apple 101
我使用awk时的问题我可以选择columnB,但我无法输出标题。
awk 'BEGIN {IGNORECASE = 1} {if($5 == "Apple") print $0 }' Data.csv> testPipe.txt
我尝试过使用NR==1,但由于某种原因它不适用于IGNORECASE。
我也试过here和here的方法。
我尝试使用grip,我可以输出标题但我无法指定columnB 用于字符串匹配。搜索将应用于所有列。
cat Data.csv |{ head -1; grep -I "Apple";} | awk -F',' '{ if ($10 >100 ) { print } }'>testPipe.txt
有没有办法结合这两种方法并获得所需的输出? 谢谢
【问题讨论】:
-
Wrt 我尝试过使用 NR==1,但由于某种原因它不适用于 IGNORECASE。,您尝试过
NR==1{print;next}吗?它在这里工作正常 -
你建议我在哪里添加这一行?在if条件下?
awk 'BEGIN {IGNORECASE = 1} {if($5 == "Apple") NR==1{print;next}}' Data.csv> testPipe.txt -
这是一个条件-动作对,放在BEGIN规则之后。喜欢
awk 'BEGIN {IGNORECASE = 1} NR==1{print;next} $5 == "Apple"' Data.csv> testPipe.txt -
awk 'BEGIN {IGNORECASE = 1} NR==1{print;next} 5 == "Apple" && $10>100' FData.csv> testPipeNew.csv它只返回标题。有空列 -
不正常吗?因为 5 永远不等于“Apple”????你在那里缺少
$
标签: bash awk ignore-case