我有一个带有大量命令的文本文件,例如:
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
这里唯一不对的是,它必须是IGNORE ABSOLUTE路径,所以输出必须看起来像这样
2 bash
2 cat
1 cat
我正在尝试使用带有if语句的while循环来检查行中是否有“/”,但它似乎不起作用。
答案 0 :(得分:2)
使用awk
,您可以说print $1
来打印第一个单词。但是,您只需要名称。为此,您可以使用basename
:
$ basename "/bin/bash"
bash
然后从basename
致电awk
。一起来:
$ awk '{system("basename "$1)}' a
ls
bash
cat
bash
cat
然后你可以管道到sort
和uniq
:
$ awk '{system("basename "$1)}' a | sort | uniq -c
2 bash
2 cat
1 ls