使用Awk从最后一列开始打印csv文件中的列

时间:2016-05-23 12:10:31

标签: csv awk comma

我有一个包含数千条记录的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。

3 个答案:

答案 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