在 Perl 中从 CSV 文件中的匹配列获取行数据?

在 Perl 中从 CSV 文件中的匹配列获取行数据?

我无法附加 CSV 文件,因此我附加了图像,以便内容清晰。我使用了awk一个perl衬垫,但没有给出任何输出。请帮助我知道如何获取具有匹配列号和列文本/值的行。

可以将其写成脚本而不是命令的形式吗?

$ perl -F, -lane 'print if $F[8]==WINDOWS2000-2' Compare_20180715191103.csv

$ awk -F, -v OFS=, '$8 == "WINDOWS2000-2 "{ print }' Compare_20180715191103.csv

在此输入图像描述

答案1

你需要这样做:

perl -F, -lane 'print if $F[7] eq "NAB-ITSA-LINUX-7"' URT_Compare_20180715191103.csv

一旦你处理好下面提到的三件事,你应该没问题:

  1. “==”运算符用于测试其操作数的数学相等性。对于字符串比较,就像您的情况一样,eq就是您所需要的。
  2. 常量字符串需要加引号,OTW 它们被视为子例程。
  3. 由于 Perl 数组索引从零开始,因此$F[8], 实际上指的是ninth数组 的元素@F

基本假设是:

  • 第8场是全场比较,不是局部比较。意思是,内容必须与您在此处显示的内容完全相同,不能有任何字符错误。
  • 没有任何字段中有逗号,因为这会分裂中场,并且字段计数会发生变化。
  • 这并不重要,只是您知道行结尾最好是 Unix 行结尾 ( LF = \n)。如果不是,那么您应该首先将它们转换为它。

答案2

步骤1: 首先检查第8列有什么,

awk -F, '{print $8}' URT_Compare_20180715191103.csv

第2步: 然后 grep 所需的模式。

awk -F, '{print $8}' URT_Compare_20180715191103.csv | grep "WINDOWS2000-2"

步骤3: 如果您在步骤 2 中得到了想要的结果,请尝试以下代码。

awk -F,  '$8 ~ "WINDOWS2000-2" ' URT_Compare_20180715191103.csv

相关内容