计数和排序历史中使用的命令
Count and sort commands used in history
我有一个包含大量命令的文本文件,例如:
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
我尝试使用带有 if 语句的 while 循环来检查一行中是否有“/”,但它似乎不起作用。
使用 awk
你可以说 print
来打印第一个字。但是,您只需要名称。为此,您可以使用 basename
:
$ basename "/bin/bash"
bash
那么就是从awk
调用basename
的事情了。总计:
$ awk '{system("basename ")}' a
ls
bash
cat
bash
cat
然后您可以通过管道传输到 sort
和 uniq
:
$ awk '{system("basename ")}' a | sort | uniq -c
2 bash
2 cat
1 ls
我有一个包含大量命令的文本文件,例如:
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
我尝试使用带有 if 语句的 while 循环来检查一行中是否有“/”,但它似乎不起作用。
使用 awk
你可以说 print
来打印第一个字。但是,您只需要名称。为此,您可以使用 basename
:
$ basename "/bin/bash"
bash
那么就是从awk
调用basename
的事情了。总计:
$ awk '{system("basename ")}' a
ls
bash
cat
bash
cat
然后您可以通过管道传输到 sort
和 uniq
:
$ awk '{system("basename ")}' a | sort | uniq -c
2 bash
2 cat
1 ls