根据第n列中的条件过滤csv中的行

时间:2019-07-24 08:28:37

标签: csv awk

我正在使用此cmd来过滤csv文件。所需功能在第19列中使标头+过滤器为True。

awk -F, 'NR==1 || $19 ~ "True"' output.csv > outputX.csv

当我使用此cmd时,原始文件有250行,但是我得到了101行,但是当我用excel打开原始文件并将第19列过滤为“ TRUE”时,我得到了112行(cmd过滤器为101行)。 打开原始csv会显示“ True”(逗号分隔符)。在excel中打开获取数据将第19行显示为“ TRUE”。为什么excel加载True到TRUE? 我想要112行与此cmd,并且可能是为什么它与众不同的原因?

希望这是可以理解的。 谢谢。

编辑:Sample

2 个答案:

答案 0 :(得分:0)

确保第19列具有“ TRUE”或“ True”

如果其为“ True”,请尝试以下操作:

awk -F, '$19 == "True"{print}' output.csv > outputX.csv

答案 1 :(得分:0)

我并没有真正关注,但是我想你想要这样的东西:

$ awk -F, '(FNR==1) || (tolower($19) ~ "true")' input.csv > output.csv

如果$19包含诸如“ obs true nts”之类的词,则这也将匹配。 tolower($19) == "true"不起作用的原因是因为excell可能会引用该词。所以这可能也可行:

$ awk -F, '(FNR==1) || (tolower($19) == "\"true\"")' input.csv > output.csv