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

时间:2015-04-20 19:24:24

标签: bash cut

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

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

这里唯一不对的是,它必须是IGNORE ABSOLUTE路径,所以输出必须看起来像这样

2 bash
2 cat
1 cat

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

1 个答案:

答案 0 :(得分:2)

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

$ basename "/bin/bash"
bash

然后从basename致电awk。一起来:

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

然后你可以管道到sortuniq

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