免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3226 | 回复: 11
打印 上一主题 下一主题

[文本处理] CSV 文件分割 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-09-10 14:36 |只看该作者 |倒序浏览
本帖最后由 Piaomiao139 于 2015-09-10 15:20 编辑

为什么用正则表达式得不到要得结果。。。
求看看
a='a,aa,"aa,a"'
输出:
a
aa
aa,a
awk -F '\"?,' '{print $'$i'}'

现在对awk了解很少停留在 分割阶段。。。

论坛徽章:
11
程序设计版块每日发帖之星
日期:2015-09-09 06:20:00CU十四周年纪念徽章
日期:2016-05-16 11:11:112016科比退役纪念章
日期:2016-05-04 17:16:57程序设计版块每日发帖之星
日期:2016-02-20 06:20:00程序设计版块每周发帖之星
日期:2015-11-06 19:30:58程序设计版块每日发帖之星
日期:2015-09-12 06:20:00程序设计版块每日发帖之星
日期:2015-09-11 06:20:00每日论坛发贴之星
日期:2015-09-10 06:20:00程序设计版块每日发帖之星
日期:2015-09-10 06:20:00每日论坛发贴之星
日期:2015-09-09 06:20:0015-16赛季CBA联赛之四川
日期:2016-12-15 15:52:10
2 [报告]
发表于 2015-09-10 15:00 |只看该作者
题目确定没问题么

论坛徽章:
0
3 [报告]
发表于 2015-09-10 15:03 |只看该作者
回复 2# 我爱你我的菜


    这本来就是csv文件会用到的啊
    csv 文件一般来说是以逗号为分隔符 一行中包含逗号的话是以双引号括起来的
    上面的只是例子啊

论坛徽章:
11
程序设计版块每日发帖之星
日期:2015-09-09 06:20:00CU十四周年纪念徽章
日期:2016-05-16 11:11:112016科比退役纪念章
日期:2016-05-04 17:16:57程序设计版块每日发帖之星
日期:2016-02-20 06:20:00程序设计版块每周发帖之星
日期:2015-11-06 19:30:58程序设计版块每日发帖之星
日期:2015-09-12 06:20:00程序设计版块每日发帖之星
日期:2015-09-11 06:20:00每日论坛发贴之星
日期:2015-09-10 06:20:00程序设计版块每日发帖之星
日期:2015-09-10 06:20:00每日论坛发贴之星
日期:2015-09-09 06:20:0015-16赛季CBA联赛之四川
日期:2016-12-15 15:52:10
4 [报告]
发表于 2015-09-10 15:08 |只看该作者
sed -r 's/.*=.([^,]*),([^,]*),"(.*)"/\1\n\2\n\3/g' test.txt

论坛徽章:
11
程序设计版块每日发帖之星
日期:2015-09-09 06:20:00CU十四周年纪念徽章
日期:2016-05-16 11:11:112016科比退役纪念章
日期:2016-05-04 17:16:57程序设计版块每日发帖之星
日期:2016-02-20 06:20:00程序设计版块每周发帖之星
日期:2015-11-06 19:30:58程序设计版块每日发帖之星
日期:2015-09-12 06:20:00程序设计版块每日发帖之星
日期:2015-09-11 06:20:00每日论坛发贴之星
日期:2015-09-10 06:20:00程序设计版块每日发帖之星
日期:2015-09-10 06:20:00每日论坛发贴之星
日期:2015-09-09 06:20:0015-16赛季CBA联赛之四川
日期:2016-12-15 15:52:10
5 [报告]
发表于 2015-09-10 15:10 |只看该作者
回复 3# Piaomiao139


   等号后边那个单引号是误操作么?

论坛徽章:
0
6 [报告]
发表于 2015-09-10 15:20 |只看该作者
回复 5# 我爱你我的菜

少写了一个 抱歉 已改
   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [报告]
发表于 2015-09-10 15:34 |只看该作者
本帖最后由 jason680 于 2015-09-10 15:50 编辑

回复 1# Piaomiao139

$ a='a,aa,"aa,a"'

$ echo $a | awk -F, 'function csv(q,n,c){for(n=1;n<=NF;n++){if(!q)c++;$c=q?$c FS $n:$n;if($n~/^"/)q=1;if($n~/"$/){q=0;gsub(/"/,"",$c)}}NF=c}{csv();for(n=1;n<=NF;n++)print $n}'
a
aa
aa,a


   

评分

参与人数 1信誉积分 +50 收起 理由
Piaomiao139 + 50 很给力!

查看全部评分

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
8 [报告]
发表于 2015-09-10 15:52 |只看该作者
  1. [root@test /tmp]$ echo 'a,aa,"aa,a"' | awk -F\" -vOFS= '{for(i=1;i<=NF;i+=2){gsub(",","\n",$i)}}1'
  2. a
  3. aa
  4. aa,a
复制代码

论坛徽章:
11
程序设计版块每日发帖之星
日期:2015-09-09 06:20:00CU十四周年纪念徽章
日期:2016-05-16 11:11:112016科比退役纪念章
日期:2016-05-04 17:16:57程序设计版块每日发帖之星
日期:2016-02-20 06:20:00程序设计版块每周发帖之星
日期:2015-11-06 19:30:58程序设计版块每日发帖之星
日期:2015-09-12 06:20:00程序设计版块每日发帖之星
日期:2015-09-11 06:20:00每日论坛发贴之星
日期:2015-09-10 06:20:00程序设计版块每日发帖之星
日期:2015-09-10 06:20:00每日论坛发贴之星
日期:2015-09-09 06:20:0015-16赛季CBA联赛之四川
日期:2016-12-15 15:52:10
9 [报告]
发表于 2015-09-10 16:16 |只看该作者
echo 'a,aa,"aa,a"'|awk -vOFS="\n" -F',' '{for(i=1;i<=NF;i++)if(($i~/^".*/)&&($(i+1)~/.*"$/)){$i=$i FS $(i+1);$(i+1)=""}gsub(/"/,"",$0)}1'

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
10 [报告]
发表于 2015-09-10 16:27 |只看该作者


gawk 4.0+ 中的 FPAT 就是专干 csv 的
  1. awk 'BEGIN{FPAT="([^,]*)|(\"[^\"]*\")"}{for(i=1;i<=NF;i++){gsub(/^\"|\"$/,"",$i);print $i}}'  
复制代码

评分

参与人数 2可用积分 +6 信誉积分 +10 收起 理由
Piaomiao139 + 10 很给力!
MMMIX + 6 很给力!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP