我试图从 CSV 文件最后一行的第二个字段中获取一个数字。到目前为止,我有这个:
awk -F"," 'END {print $2}' /file/path/fileName.csv
除非最后一行中的第一个字段中有逗号,否则这是有效的。所以对于看起来像这样的行,
"Company Name, LLC", 12345, Type1, SubType3
...在哪里"Company Name, LLC"
实际上是第一个字段,awk
命令将返回LLC
.
如何忽略第一个字段中的逗号以便获取第二个字段中的信息?
我认为您的要求是使用的完美用例FPAT
in GNU Awk
,
Quoting as-is来自man page,
通常情况下,使用时FS
, gawk
将字段定义为出现在每个字段分隔符之间的记录部分。换句话说,FS
定义字段不是什么,而不是字段是什么。然而,有时您确实想根据字段是什么来定义字段,而不是根据字段不是什么来定义字段。
最臭名昭著的此类情况是所谓的逗号分隔值 (CSV) 数据。如果逗号只是分隔数据,就不会有问题。当其中一个字段包含嵌入的逗号时就会出现问题。在这种情况下,大多数程序都会将该字段嵌入双引号中。
对于此处显示的 CSV 数据,每个字段要么是“不是逗号的任何内容”,要么是“双引号、不是双引号的任何内容以及结束双引号”。如果写为正则表达式常量(请参阅 Regexp),我们将有/([^,]+)|("[^"]+")/
。将其写为字符串需要我们转义双引号,从而导致:
FPAT = "([^,]+)|(\"[^\"]+\")"
在您的输入文件上使用它,
awk 'BEGIN{FPAT = "([^,]+)|(\"[^\"]+\")"}{print $1}' file
"Company Name, LLC"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)