仅使用 'grep' 命令获取特定列

using only 'grep' command to get specific column

下面显示了这几行 csv 文件,我想获得仅使用 grep 命令获得人口列的结果。

id,Association,Population,Variant(s),Gene(s),PubMed
1,non-significant,Dutch,HLA-B40,HLA-B,1859103
2,non-significant,Dutch,HLA-DRB5,HLA-DRB5,1859103
3,non-significant,Finnish,APOB,APOB,8018664
4,significant,Finnish,APOC3,APOC3,8018664
5,significant,Finnish,E2/E3/E4,APOE,8018664
6,significant,French,I/D,ACE,8136829

我想要的结果:

Dutch
Dutch
Finnish
Finnish
Finnish
French

我针对这个问题所做的命令是

 cat information.csv | grep -Eo '^([^,]*,){2}[^,]*'

结果如下

id,Association,Population
1,non-significant,Dutch
2,non-significant,Dutch
3,non-significant,Finnish
4,significant,Finnish
5,significant,Finnish
6,significant,French

如何在不使用 awk sed 或任何其他东西的情况下摆脱其余的东西?

您可以使用带有 PCRE 模式的 GNU grep:

grep -Po '^([^,]*,){2}\K[^,]*' file

这里,

  • ^ - 字符串开头
  • ([^,]*,){2} - 除了 , 以外的任何零个或多个字符出现两次,然后是 ,
  • \K - 匹配重置运算符丢弃目前匹配的所有文本
  • [^,]* - 除逗号外的零个或多个字符。