正则表达式 – 在bash中解析类似.csv的文件
发布时间:2020-12-14 06:00:29 所属栏目:百科 来源:网络整理
导读:我有一个格式如下的文件: string1,string2,string3,...... 我必须分析第二列,计算每个字符串的出现次数,并生成一个格式如下的文件: "number of occurrences of x",x"number of occurrences of y",y ... 我设法编写以下脚本,工作正常: #!/bin/bash outputr
我有一个格式如下的文件:
string1,string2,string3,... ... 我必须分析第二列,计算每个字符串的出现次数,并生成一个格式如下的文件: "number of occurrences of x",x "number of occurrences of y",y ... 我设法编写以下脚本,工作正常: #!/bin/bash > output regExp='^s*([0-9]+) (.+)$' while IFS= read -r line do if [[ "$line" =~ $regExp ]] then printf "${BASH_REMATCH[1]},${BASH_REMATCH[2]}n" >> output fi done <<< "`gawk -F,'!/^$/ {print $2}' $1 | sort | uniq -c`" 我的问题是: 特别是我不知道如何解决这个问题: gawk -F,'!/^$/ {print $2}' miocsv.csv | sort | uniq -c | gawk '{print $1","$2}' 问题是string2可以包含空格,如果是这样,gawk上的第二次调用将截断字符串. 非常感谢, 编辑: 如上所述,这里有一些示例数据: (这是一项练习,对于创造性而言遗憾) 输入: *,*,* test,test,test prova,prova test,prova,prova leonardo,da vinci,leonardo in,o u t,pr,spaces,leonardo,leonardo leonardo,pr test,tabs,po,po po,po prova,prova prova,prova *,* *, 输出: 3,* 4,* 4,da vinci 2,o u t 3,po 1,prova 3,spaces 3,tabs 1,test 2,test 解决方法
awk中的单行:
awk -F,'x[$2]++ { } END { for (i in x) print x[i] "," i }' input.csv 它将每个第二列字符串的计数存储在关联数组x中,最后通过数组循环并打印结果. 要获得您为此示例显示的确切输出,您需要将其传递给sort(1),将字段分隔符设置为,以及将排序键设置为第二个字段: awk -F," i }' input.csv | sort -t,-k2,2 当然,唯一的条件是每行的第二列不包含a, (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |