使用 grep 从 .csv 文件中选择行

舒布阿什

我有一个 .csv 文件,其中包含如下数据:

English short name (upper/lower case);Alpha-2 code;Alpha-3 code;Numeric code;ISO 3166-2 codes
"Afghanistan";AF;AFG;004;ISO 3166-2:AF
"Åland Islands";AX;ALA;248;ISO 3166-2:AX
"Albania";AL;ALB;008;ISO 3166-2:AL

现在,我需要选择三个字符代码(Alpha-3 代码,第 3 列)中的前两个字符与两个字符代码(Alpha-2 代码,第 2 列)中的两个字符不相同的所有行.

我不知道如何将这两个词与 grep 和 regex 进行比较。

艾拉里昂

正如我在评论中提到的,我绝不是awk专家,所以我 100% 确信其他人可以提出更好的答案。但是现在我认为这可以满足您的需求。我将上面的示例文本放入example.csv

awk -F';' '{if (NR > 1 && $2 != substr($3,0,2)) print $0}' example.csv

输出:

"Åland Islands";AX;ALA;248;ISO 3166-2:AX

说明:

  • awk:来自文档,“一个程序,您可以使用它来选择文件中的特定记录并对其执行操作”(请参阅GNU Awk 用户指南
  • -F';': 告诉awk使用 a;作为字段分隔符。重要说明,这可能不会很好地处理引用的字段分隔符(例如“AF;”;)
  • {if (NR > 1 && $2 != substr($3,0,2)) print $0}:这是awk运行 的“程序”
    • if (... && ...):一个需要满足两个条件的 if 语句(例如 ancondition)
    • NR > 1:仅查看大于 1 的行(例如跳过标题行)
    • $2 != substr($3,0,2): 检查第二个标记是否不等于第三个标记的前两个字符
    • print $0: 如果条件为真,则打印整行 ( $0)

附加说明

如果您想操作输出——例如,您只需要国家/地区名称(第一个字段),或者想添加一些额外的文本——您可以更改print语句:

awk -F';' '{if (NR > 1 && $2 != substr($3,0,2)) print "Country: " $1}' example.csv

输出:

Country: "Åland Islands"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章