我有多个具有键/值的文件
文件#1:
key1: 1
key2: 2
key3: 3
key4: 4
文件#2:
key1: 1
key2: 23
key3: 23
key4: 4
文件#3:
key1: 20
key2: 223
key3: 213
key4: 0
如何确定每个键在所有文件中是否都有不同的值?以及如何grep和计算所有文件中的所有不同值?
Expected outputs:
key name : count
key1: 2
key2: 3
key3: 3
key4: 2
答案 0 :(得分:1)
$ cat file{1,2,3} | sort -k1,1 -k2n | uniq -c
2 key1: 1
1 key1: 20
1 key2: 2
1 key2: 23
1 key2: 223
1 key3: 3
1 key3: 23
1 key3: 213
1 key4: 0
2 key4: 4
会告诉您key: 1
出现两次,key1: 20
也存在。
管道到
... | awk '$1>1'
2 key1: 1
2 key4: 4
为您提供两个键具有重复值。或全部在awk
$ awk '{a[$0]++}
END{for(k in a) if(a[k]>1) print a[k], k}' file{1,2,3}
2 key1: 1
2 key4: 4
你可以以任何方式指定输入bash可以扩展到文件列表,例如dir/*.txt
会这样做。
嗯,问题改变了!现在,这就是你想要的
$ cat file{1,2,3} | sort -k1,1 -k2n | uniq -c |
awk '{print $2}'| uniq -c |
awk 'BEGIN{print "keyword","count"} {print $2,$1}'
keyword count
key1: 2
key2: 3
key3: 3
key4: 2
或全部在一个awk
$ awk '{a[$0]++}
END{print "keyname", "count";
for(k in a) {split(k,b," ") c[b[1]]++}
for(k in c) {print k, c[k]}}' file{1,2,3}
keyname count
key3: 3
key4: 2
key1: 2
key2: 3
答案 1 :(得分:0)
for key in `awk -F ":" '{print $1 }' file1`;do grep key <file1> <file2> <file3> |sort -n | uniq|wc -l;done
如果你想总结所有的distict值
for key in `awk -F ":" '{print $1 }' file1`;do grep key <file1> <file2> <file3> |awk -F ":" '{sum+=$2}END{print sum}';done