【发布时间】:2013-06-11 19:12:28
【问题描述】:
我有自己无法解决的文本处理问题,因此我需要聪明人的帮助。
我的虚拟文件示例如下所示:
Winter Sally Additional_text
Winter Sally Additional_text
Winter Nicole Additional_text
Spring Lucy Additional_text
Spring Lucy Additional_text
Spring Caroline Additional_text
Spring Caroline Additional_text
Summer Emma Additional_text
Autumn Rita Additional_text
Autumn Rita Additional_text
Autumn Cristina Additional_text
Autumn Lucy's_sister Additional_text
Autumn Lucy's_sister Additional_text
我想:
对于每个第一列项目,计算第二列中有多少不同的名称。但我只需要计算那些名称:1)至少出现两次并且 2)至少有两个不同的名称(它们都至少出现两次)。
对于这样的输出:
Time Counts
Spring 2
Autumn 2
输出说明:
在Winter 中有两个不同的名称,但Nicole 只出现一次 - 未报告winter;
在Spring 中至少有两个不同的名称,并且每个名称至少出现两次 - 报告Spring 中有多少不同的名称;
在Summer 中只有一个名字 - Summer 未报告;
在 Autumn 中,三个不同的名称,但其中只有两个至少出现两次 - 报告的计数仅针对 Rita 和 Lucy's_sister。
编辑
我在 awk 和 bash 中的解决方案:
cut -d " " -f 1 FILE | sort -u > names
for i in $(cat names)
do
grep ^$i FILE |
awk '{print $2}' |
sort |
uniq -c |
awk -v VAR="$i" '($1>=2) {print VAR}' |
sort |
uniq -c |
awk '($1>=2) {print $2"\t"$1}'
done
这太笨拙和重复了,所以我想知道更简单的方法。
【问题讨论】:
-
你尝试过什么?