我想使用AWK比较文件中的两列,请有人帮忙吗?
e.g。
Col1 Col2
---- ----
2 A
2 D
3 D
3 D
3 A
7 N
7 M
1 D
1 R
现在我想使用AWK实现以下算法来查找这些列之间的匹配:
list1[] <=== Col1
list2[] <=== Col2
NewList[]
for i in col2:
d = 0
for j in range(1,len(col2)):
if i == list2[j]:
d++
NewList.append(list1[list2.index[i]])
预期结果:
A ==> 2 // means A matches two times to Col1
D ==> 4 // means D matches two times to Col1
....
所以我想用AWK脚本编写上面的代码,我发现它对我来说太复杂了,因为我还没有用过它。
非常感谢您的帮助
答案 0 :(得分:2)
并非所有这些都复杂,将计数保存在由字符索引的数组中,并在最后打印出数组;
awk '{cnt[$2]++} END {for(c in cnt) print c, cnt[c]}' test.txt
# A 2
# D 4
# M 1
# N 1
# R 1
{cnt[$2]++} # For each row, get the second column and increase the
# value of the array at that position (ie cnt['A']++)
END {for(c in cnt) print c, cnt[c]}
# When all rows done (END), loop through the keys of the
# array and print key and array[key] (the value)
答案 1 :(得分:1)
替代解决方案
$ rev file | cut -c1 | sort | uniq -c
2 A
4 D
1 M
1 N
1 R
格式化管道为... | sed -r 's/(\w) (\w)/\2 ==> \1/'
A ==> 2
D ==> 4
M ==> 1
N ==> 1
R ==> 1
或者,在awk