我有一个 .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 语句(例如 an和condition)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] 删除。
我来说两句