我有一个包含数千条记录的CSV文件。每条记录以逗号分隔,每列有114列。
我需要打印4列:89,90,91,92但是第87和86列是单引号,可能有逗号或特殊字符,据我所知,使用awk
来提取这些列会变得复杂
我认为使用awk
并从记录末尾开始提取这些列可能更简单:从记录的最后一列开始提取第23,24,25,26列,其中最后一行没有逗号列存在。
如果您能提供任何帮助,请与我们联系。
输入记录示例:
{144361,1,,,,,,,,,,,,'video14.ams01.hls.','http://video14.ams01.hls.ttvnw.net/hls-826494/wolfontwitchtv_16706535008_316775727/mobile/py-index-live.m3u8?token=id=9043516345222409985,bid=16706535008,exp=1443697094,node=video14-1.ams01.hls.justin.tv,nname=video14.ams01,fmt=mobile&sig=af9c82188126e...','AppleCoreMedia/1.0.0.12B436 (iPhone; U; CPU OS 8_1_1 like Mac OS X; en_us)’,column89,column90,column91,column92,’ios','iPhone',298209470,1,,,,,,,,,1,,1,,1,}
预期结果: {column89,column90,column91,column92}
THX。
答案 0 :(得分:0)
如果您使用的是gawk版本> 4.0.0:
awk -v FPAT="([^,]+)|(\'[^\']+\')" '{print $89,$90,$91,$92}' File
答案 1 :(得分:0)
这是另一种方法
$ rev badcsv | awk 'BEGIN{OFS=FS=","} {print $2,$3}' | rev
15,16
25,26
,其中
$ cat badcsv
11,12,13,"14,141,142",15,16,17
21,22,23,24,25,26,27
答案 2 :(得分:0)
声音就像您需要的一样:
awk 'BEGIN{FS=OFS=","; d=114-88} {for (i=1;i<=4;i++) printf "%s%s", $(NF-d+i), (i<4?OFS:ORS)}' file
但是您的样本输入/输出不足以说明借用@karakfa的样本输入到打印字段5和6将是:
$ cat badcsv
11,12,13,"14,141,142",15,16,17
21,22,23,24,25,26,27
$ awk 'BEGIN{FS=OFS=","; d=7-4} {for (i=1;i<=2;i++) printf "%s%s", $(NF-d+i), (i<2?OFS:ORS)}' badcsv
15,16
25,26