计数和排序历史中使用的命令

Count and sort commands used in history

我有一个包含大量命令的文本文件,例如:

ls -l
/bin/bash/
cat file.txt
bash
cat somethingElse

我要做的是,获取命令的名称(lscatbash)并计算它们。我已经这样做了:

cut -d' ' -f1 file.txt | tr ' ' '\n' | sort | uniq -c

这几乎和我想要的一样——输出是:

1 bash
1 /bin/bash
2 cat
1 ls

这里唯一有问题的是,它必须忽略绝对路径,所以输出必须是这样的

2 bash
2 cat
1 cat

我尝试使用带有 if 语句的 while 循环来检查一行中是否有“/”,但它似乎不起作用。

使用 awk 你可以说 print 来打印第一个字。但是,您只需要名称。为此,您可以使用 basename:

$ basename "/bin/bash"
bash

那么就是从awk调用basename的事情了。总计:

$ awk '{system("basename ")}' a
ls
bash
cat
bash
cat

然后您可以通过管道传输到 sortuniq:

$ awk '{system("basename ")}' a | sort | uniq -c
      2 bash
      2 cat
      1 ls