我有下面的输入文件,我现在需要找出最后一列的出现而不管其他列。
我试过这段代码但没有用过
cat filename.txt | sort -t'|' -k3,4 | uniq -c -f1
的输入
17年9月6日| 19:14:05.862 | 61284017123 | 505023892353450
17年9月6日| 19:29:48.409 | 61284017123 | 505023892353457
17年9月6日| 19:30:05.648 | 61284017123 | 505023892353457
17年9月6日| 19:44:46.085 | 61284017123 | 505023892353457
17年9月6日| 04:23:03.038 | 61284017941 | 505023892353450
17年9月6日| 04:30:50.691 | 61284017942 | 505023892353451
17年9月6日| 04:43:48.407 | 61284017942 | 505023892353451
17年9月6日| 04:27:50.293 | 61284017944 | 505023892353453
17年9月6日| 03:51:24.130 | 61284017949 | 505023892353458
17年9月6日| 04:06:45.220 | 61284017949 | 505023892353458
预期输出
没有发生和任何一行
17年9月6日| 19:14:05.862 | 61284017123 | 505023892353450 | 2
17年9月6日| 19:29:48.409 | 61284017123 | 505023892353457 | 3
17年9月6日| 04:30:50.691 | 61284017942 | 505023892353451 | 2
17年9月6日| 04:27:50.293 | 61284017944 | 505023892353453 | 1个
17年9月6日| 03:51:24.130 | 61284017949 | 505023892353458 | 2
答案 0 :(得分:1)
试试这个:
-u for unique
cat filename.txt | sort -t'|' -k3,4 -u
答案 1 :(得分:1)
这个双解析解决方案在这里工作,即首次计数出现,然后打印带有计数的唯一行:
parse.awk
BEGIN { FS = OFS = "|" }
FNR==NR {
h[$NF]++
next
}
$NF in h {
print $0 OFS h[$NF]
delete h[$NF]
}
像这样运行:
awk -f parse.awk input{,}
输出:
09-06-17|19:14:05.862|61284017123|505023892353450|2
09-06-17|19:29:48.409|61284017123|505023892353457|3
09-06-17|04:30:50.691|61284017942|505023892353451|2
09-06-17|04:27:50.293|61284017944|505023892353453|1
09-06-17|03:51:24.130|61284017949|505023892353458|2
答案 2 :(得分:0)
这对我有用:) awk -F'|' '!z[$4]++{ a[$4]=$0; } END {for (i in a) print a[i]"|" z[i]}' filename