给定一个txt文件,它具有以下值:
123
123
234
234
123
345
我用
sort FILE | uniq -cd
为了获得每个值的计数。 但是我怎么能输出它被发现的行?
输出:
123 3 0;1;4
234 2 2;3
行数基于零,因此是上述数字。
答案 0 :(得分:1)
awk 解决方案:
awk '{ a[$1]=($1 in a? a[$1]";":"")(NR-1); cnt[$1]++ }
END{ for(i in a) if(a[i]~/;/) { print i,cnt[i],a[i] } }' file
a[$1]=($1 in a? a[$1]";":"")(NR-1)
- 通过将多个匹配项与0
;
开始) >
cnt[$1]++
- 计算值出现次数
输出:
123 3 0;1;4
234 2 2;3
答案 1 :(得分:0)
下面也可以帮助你,它也会对输出进行排序。
awk '{a[$0]++;b[$0]=b[$0]?b[$0]";"(FNR-1):(FNR-1==0?"0":FNR-1)} END{for(i in a){print i,a[i],b[i] | "sort"}}' Input_file
现在也添加非单线形式的解决方案。
awk '{
a[$0]++;
b[$0]=b[$0]?b[$0]";"(FNR-1):(FNR-1==0?"0":FNR-1)
}
END{
for(i in a){
print i,a[i],b[i] | "sort"
}}
' Input_file
答案 2 :(得分:0)
我知道问题是标记为awk / sed,但是为了比较看看Python版本有多详细:
import sys
dictionary = {}
for i, line in enumerate(sys.stdin):
dictionary.setdefault(line.strip(), []).append(str(i))
for value, lines_numbers in dictionary.items():
print(value, len(line_numbers), ";".join(line_numbers))
测试:
$ python script.py < FILE
123 3 0;1;4
234 2 2;3
345 1 5
答案 3 :(得分:0)
awk '
{
frequency[$1]++
if (line[$1]=="")
{
line[$1]=NR-1
}
else
{
line[$1]=line[$1]";"NR-1
}
}
END{
for (j in frequency)
if (frequency[j]>1)
print j, frequency[j], line[j]
}' file
$1
:第一栏的内容
NR
:当前行号
输出:
234 2 2;3 123 3 0;1;4