名称相同的文件



我使用find并将结果保存到file.txt文件中。现在我想检查同名的文件首先排序的最高计数。例如:

/Volumes/1 drive/foo
/Volumes/1 drive/bar
/Volumes/1 drive/foo2
/Volumes/2 drive/foo
/Volumes/2 drive/bar2
/Volumes/3 drive/1/foo
/Volumes/3 drive/2/bar

我正在运行这个命令:

cat file.txt | awk -F '/' '{print $NR}' | uniq -c | sort

但是awk输出不能正常工作,它只打印第一行:

Volumes
1 drive
foo

编辑:输出应该是:

3 foo
2 bar
1 foo2
1 bar2

如果您试图删除路径并仅保留最后一个斜杠之后的部分,您可以使用sed这样做:sed 's|.*/||'

请注意,您需要一个排序的列uniq -c工作。因此,如果您希望对其输出进行排序,则需要两个sort调用:

> sed 's|.*/||' file.txt | sort | uniq -c | sort -rn
3 foo
2 bar
1 foo2
1 bar2

如果你想使用awk,那么你可能需要$NF而不是$NR:

awk -F '/' '{print $NF}' file.txt | sort | uniq -c | sort -rn

这个答案显示了awk的使用。

或者,您可以尝试下面的awk一行代码:

$ awk -F'/' '{a[$NF]++} END{for (x in a)print a[x],x}' file.txt|sort -nr
3 foo
2 bar
1 foo2
1 bar2
{m,n,g}awk '
{ __[$!++NF]++ } END { ___=_+=_=length(FS)

PROCINFO["sorted_in"] = "@val_num_desc"

for (_ in __) {
printf("%47*.f %sn",___,__[_],_) } }' FS='^.+[/]' OFS= 

| gsort -nr  # pipe over to sort for any non-gnu awk
3 foo
2 bar
1 foo2
1 bar2
$ xargs -I "{}" basename "{}" <file|sort|uniq -c
2 bar
1 bar2
3 foo
1 foo2
$ xargs -I "{}" basename "{}" <file|sort|uniq -c|sed 's/^ *//'|sort -nr
3 foo
2 bar
1 foo2
1 bar2

使用find作为输入

find /your/path -type f -print0|xargs -0 basename -a|sort|uniq -c|sed 's/^ *//'|sort -nr

相关内容

  • 没有找到相关文章

最新更新