嗨,我是新手linux用户。我正在尝试使用bash中的find命令搜索给定目录,每个目录包含多个同名但内容不同的文件,以便在文件中找到最大值。
最初我没有将目录作为输入,并且知道文件不会少于2个目录深,所以我使用嵌套循环如下:
prev_value=0
for i in <directory_name> ; do
if [ -d "$i" ]; then
cd $i
for j in "$i"/* ; do
if [ -d "$j" ]; then
cd $j
curr_value=`grep "<keyword>" <filename>.txt | cut -c32-33` #gets value I'm comparing
if [ $curr_value -lt $prev_value ]; then
curr_value=$prev_value
else
prev_value=$curr_value
fi
fi
done
fi
done
echo $prev_value
显然现在不会削减它。我查看了find的-exec选项,但由于find产生了大量的结果,我只是不确定如何处理变量赋值和比较。任何帮助将不胜感激,谢谢。
答案 0 :(得分:2)
find "${DIRECTORY}" -name "${FILENAME}.txt" -print0 | xargs -0 -L 1 grep "${KEYWORD}" | cut -c32-33 | sort -nr | head -n1
我们发现名为FILENAME.txt
的文件名(FILENAME
是bash变量)存在于DIRECTORY
下。
我们将它们全部打印出来,用空格分隔(这可以避免目录或文件名中某些字符出现任何问题)。
然后我们使用xargs
再次读取它们,并将空值分隔(-0
)值作为参数传递给grep
,为每个文件名启动一个grep
(-L 1
- 让我们在这里符合POSIX标准)。 (我这样做是为了避免grep
打印文件名,这会搞砸cut
)。
然后我们sort
所有结果,数字(-n
),按降序排列(-r
)。
最后,我们采用排序数字的第一行(head -n1
) - 这将是最大值。
P.S。如果您有4个CPU核心,可以尝试将-P 4
选项添加到xargs
,以尝试使其grep
部分运行得更快。