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

Bash 历史记录中使用的计数和排序命令,bash,cut,Bash,Cut,我有一个包含大量命令的文本文件,例如: ls -l /bin/bash/ cat file.txt bash cat somethingElse 我要做的是,获取命令ls、cat、bash的名称,并对它们进行计数。我已经这样做了: cut -d' ' -f1 file.txt | tr ' ' '\n' | sort | uniq -c 这几乎和我想输出的一样: 1 bash 1 /bin/bash 2 cat 1 ls 这里唯一的问题是,它必须忽略绝对路径,因此输出必须如下所示 2 ba

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

ls -l
/bin/bash/
cat file.txt
bash
cat somethingElse
我要做的是,获取命令ls、cat、bash的名称,并对它们进行计数。我已经这样做了:

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
我尝试使用一个while循环,其中包含一个if语句,用于检查行中是否有/,但它似乎不起作用。

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

然后是从awk调用basename的问题。总而言之:

$ awk '{system("basename "$1)}' a
ls
bash
cat
bash
cat
然后,您可以通过管道进行排序和uniq:


谢谢你,按计划工作!有没有办法重新生成您的命令,因此它也将管道作为命令的一部分?假设有一行包含:cat file.txt | sort | uniq-c,它也会将sort和uniq计算为命令,并以cmd?Mmmm进行计数和打印。也许您应该事先用新行替换管道:tr'|'''\n'$ awk '{system("basename "$1)}' a ls bash cat bash cat
$ awk '{system("basename "$1)}' a | sort | uniq -c
      2 bash
      2 cat
      1 ls