我有一个格式如下的文件:
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上的第二次调用将截断字符串.
我不知道如何打印所有字段“从2到NF”,保持分隔符,这可以连续发生几次.
非常感谢,
再见
编辑:
如上所述,这里有一些示例数据:
(这是一项练习,对于创造性而言遗憾)
输入:
*,*,* 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