仅使用 '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
- 匹配重置运算符丢弃目前匹配的所有文本
[^,]*
- 除逗号外的零个或多个字符。
下面显示了这几行 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
- 匹配重置运算符丢弃目前匹配的所有文本[^,]*
- 除逗号外的零个或多个字符。