我有一个csv文件我想搜索string特定列columnB
(在我的数据集5列)(忽略大小写),并在anothercolumnC
(在我的数据集列10)应用过滤器。然后选中的列保存到一个文件。
数据集的样品
columnA columnB columnC columnD
abc Apple 100 today
nbd apple 50 tomorrow
ccc apple 101 today
期望的输出
columnB columnC
Apple 100
apple 101
当我使用awk
我可以select columnB
,但我不能输出header问题。
awk 'BEGIN {IGNORECASE = 1} {if($5 == "Apple") print $0 }' Data.csv> testPipe.txt
我一直在使用NR==1
尝试,但由于某种原因,它不与IGNORECASE
工作。
我也试过方法这里和这里。
我试图用grip
,我可以输出header但我不能指定columnB
为string matching.And搜索将应用于所有列。
cat Data.csv |{ head -1; grep -I "Apple";} | awk -F',' '{ if ($10 >100 ) { print } }'>testPipe.txt
有没有一种方法,以这两种方法结合起来,并得到所需的输出? 谢谢
分析解答
以下添加到您的BEGIN条款,之前或设置IGNORECASE后:
getline;
print;
解释:BEGIN子句一切前执行一次,这样你就可以生产线有,太多,但你必须手动读取他们进来。
完整的例子:
awk '
BEGIN {
getline;
print;
IGNORECASE = 1;
}
$2 == "apple" && $3 <= 100 {
print $1;
}
'