【发布时间】:2015-04-30 19:15:58
【问题描述】:
我很少使用 awk,我想我忘记了将它与 CSV 文件一起使用的基本知识,在这里,但我有以下文件,名为 new2.csv:
Filename,Dist.(ft),BR Name,BR 2-Way Time,Till/WBR Name,Till/WBR 2-Way Time
FILE____007P_1.DZT,0,BR,,Till/WBR,
FILE____007P_1.DZT,0.042,BR,,Till/WBR,
FILE____007P_1.DZT,0.083,BR,,Till/WBR,
FILE____007P_1.DZT,0.125,BR,,Till/WBR,
FILE____007P_1.DZT,0.167,BR,,Till/WBR,
FILE____007P_1.DZT,0.208,BR,92.58,Till/WBR,
FILE____007P_1.DZT,0.25,BR,,Till/WBR,29.3
FILE____007P_1.DZT,0.292,BR,,Till/WBR,
我只想使用 awk 保留第四列或第六列(第 7 行和第 8 行)中具有值的行。
我尝试了一些方法来检查那里发生了什么:
awk -F',' '{print NR, "->", $4}' new2.csv
返回第 7 行 -> 第 7 行返回 92.58,其余行返回任何内容,这很好。接下来,我尝试了
awk -F',' '{print NR, "->", $6}' new2.csv
返回第 8 行 -> 29.3,所以我们仍然很好。
认为我已经解决了,我继续前进
awk -F',' '$4!=""' new2.csv
并按预期打印标题行和代码的第七行。继续第 6 列,我编写了相同的表达式,它返回 new2.csv 的全部内容。为了解决问题,我尝试了
awk -F',' '{print NR, "->", $6!=""}' new2.csv
然后返回第 1 行 -> 1, 第 2 行 -> 1, ..., 第 8 行 ->1, ...等等,所以这是我的问题。这是怎么回事?有什么办法可以解决吗?
行尾的逗号似乎可能是问题的根源,但在阅读了很多帖子后,我仍然不确定该怎么做。 awk '{print substr($0,0,length($0)-1)}' new.csv 也不会删除最后一个逗号。我在 Windows 8 机器上生成了 csv,并在 bash 中的 Linux 机器上使用 awk。
【问题讨论】:
-
第 4 列和第 6 列都有值?
-
您的示例输入没有在第 4 列和第 6 列中具有值的行。
FILE____007P_1.DZT,0.208,BR,92.58,Till/WBR,在第 4 列有92.58,但在第 6 列没有,而FILE____007P_1.DZT,0.25,BR,,Till/WBR,29.3在第 6 列有29.3,但在第 4 列没有,其他任何地方都没有值。 -
是的,数据集中的所有行都有 $1、$2、$3 和 $5 的值。有些行也有 $4 或 $6 值,但没有行(除了标题)将同时具有 $4 && $6 值。最终目标是编写一个新文件,该文件仅包含在第四列或第六列中具有值的行。刚刚在上面进行了编辑以澄清 - 感谢您抓住它。
-
好的,然后将您问题中的所有“和”更改为“或”。新文件是否应该包含标题行?