我有一个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;
    }
'