Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 对循环和显示的输出进行排序_Bash - Fatal编程技术网

Bash 对循环和显示的输出进行排序

Bash 对循环和显示的输出进行排序,bash,Bash,我有一个脚本,它在一个目录中循环,并为每个文件计算某个单词的迭代次数。运行脚本时,每个文件的迭代次数将输出到屏幕。不过,我想先对列表进行排序,然后再输出 我知道我需要输出到某个地方进行排序,但我不确定如何实现这一点。在非脚本语言中,我可能会将循环的输出放入数组中,但我不认为Bash应该这样做 for f in /home/reviews_folder/* do tr -s ' ' '\n' < $f | grep - c '<Author>' done 用于/home

我有一个脚本,它在一个目录中循环,并为每个文件计算某个单词的迭代次数。运行脚本时,每个文件的迭代次数将输出到屏幕。不过,我想先对列表进行排序,然后再输出

我知道我需要输出到某个地方进行排序,但我不确定如何实现这一点。在非脚本语言中,我可能会将循环的输出放入数组中,但我不认为Bash应该这样做

for f in /home/reviews_folder/*
do
    tr -s ' ' '\n' < $f | grep - c '<Author>'
done
用于/home/reviews\u文件夹中的f/*
做
tr-s''\n'<$f | grep-c''
完成

我不认为我会把排序放在循环中,那么我如何在循环和排序之间创建一个管道呢

循环是一个复合命令,循环体中的每个命令都从循环继承其标准输出。这意味着您可以简单地通过管道将循环本身传输到
排序

for f in /home/reviews_folder/*; do
  tr -s ' ' '\n' < "$f" | grep -c '<Author>'
done | sort
用于/home/reviews_文件夹中的f/*;做
tr-s''\n'<“$f”| grep-c”
完成|排序

cat/home/reviews_folder/*|tr-s''\n'| grep-c'| sort
?您当前的代码似乎没有输出文件名,只是输出计数。而且
-c
'看起来像一个typo@Biffen你不需要括号;一个
for
循环本身就是一个命令。是的,我没有输入代码来输出文件名,但老实说,我已经试了几个小时了,不知道怎么做。我认为它类似于| sort&&echo basename$FilePath,但不确定如何安排它