【发布时间】:2020-12-12 20:10:07
【问题描述】:
awk '{while(match($0,/("[^"]+",|[^,]*,|([^,]+$))/,a)){
$0=substr($0,RSTART+RLENGTH);b[++x]=a[0]}
print b[1] b[4];x=0}' file
我想了解 match 子句,并想知道如何使其动态化,以便它可以将分隔符作为参数,而不是将其硬编码为逗号。
我试过了,但是因为我没有这个功能的背景,所以没有用。
awk -v dl '{while(match($0,/("[^"]+"dl|[^,]*dl|([^,]+$))/,a)){
$0=substr($0,RSTART+RLENGTH);b[++x]=a[0]}
print b[1] b[4];x=0}' file
输入文件数据:
a,b,c,"d,e,f",
"a,b",c,d,"e,f",
p,q,r,"s,u",
所需的输出(可能是第 4 个字段):
d,e,f
e,f
s,u
所需的输出(可能是第 5 个字段,因此它应该生成 3 行空白值):
在这里,分隔符可以是任何逗号、管道和所需的字段编号也是动态的..这就是为什么我想传递字段编号和分隔符的参数..
字段编号参数工作正常,但分隔符参数不行?
正如 Anubhava 所建议的,我使用的 fpat 工作得非常好,但是在从输入文件中获取第 5 列时它没有给出任何行?
【问题讨论】:
-
wrt
it is not giving any rows when fetching the column 5th form the input file- 您的输入文件中没有任何第 5 列数据,您总是有 4 个字段,然后是最终的,然后什么都没有,所以您的第 5 列始终为空。 -
@EdMorton 感谢您的回复...实际上我已经向 Anubhava 提供了示例记录,并且在示例数据中(有问题提供)每行有 4 个分隔符,这意味着它应该有第 5 列.. 但为了使其更明显,我应该添加标题..
-
它确实有第 5 列,只是其中没有任何数据。 - 这就是我的观点。