繁体   English   中英

如何打印此 CSV 文件中的特定字段?

[英]How do I print specific fields in this CSV file?

我正在尝试使用 awk 打印此 CSV 文件中的特定字段,但我遇到了一个问题,其中某些行包含逗号但它们不是新字段。 例如,以下行对我来说没有问题。

ABAKEV,InChI=1S/C10H7NO/c12-7-9-6-5-8-3-1-2-4-10(8)11-9/h1-7H,8,2,H7C10ON,1562.9152

我用:

awk -F "," '{print $1,$3,$5,$6}'

这给了我想要的结果:

ABAKEV 8 H7C10ON 1562.9152

但是,当某些行在应该属于第二个字段的括号内包含逗号时。 例如:

ACEMID03,InChI=1S/C2H5NO/c1-2(3)4/h1H3,(H2,3,4),18,1,H5C2ON,1491.2031,-,308.5,158.19,CC(=O)N,10.87831,3.89183,54.21

具体来说,

(H2,3,4)

我想要的结果是:

ACEMID03 18 H5C2ON 1491.2031

有没有人对我如何以我想要的方式打破它有任何想法? 最好我想使用 awk,因为我更熟悉它。 如果其他人有任何快速解决方案,请告诉我。 谢谢!

使用 GNU awk for FPAT 来识别字段:

$ awk -v FPAT='[^,]+|[(][^()]+)' '{for (i=1; i<=NF; i++) print i, $i}' file
1 ACEMID03
2 InChI=1S/C2H5NO/c1-2(3)4/h1H3
3 (H2,3,4)
4 18
5 1
6 H5C2ON
7 1491.2031
8 -
9 308.5
10 158.19
11 CC(=O)N
12 10.87831
13 3.89183
14 54.21

.

$ awk -v FPAT='[^,]+|[(][^()]+)' '{print $1,$3,$5,$6}' file
ACEMID03 (H2,3,4) 1 H5C2ON

另请参阅使用 awk 有效解析 CSV 的最可靠方法是什么? .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM