从外部文本文件访问路径

从外部文本文件访问路径

我有一个文本文件,其中包含某些名称相同的日志文件的路径。

/inc/sync/result/debug_TFS16.log
/inc/async/result/debug_TFS16.log
/dec/sync/result/debug_TFS16.log
/dec/async/result/debug_TFS16.log

如何一次一行选择路径并使用它来运行另一个脚本来进一步操作日志文件?

答案1

也许使用循环:

#! /bin/bash

COUNT=0

while read line 
do 

COUNT=`expr ${COUNT} + 1`

PATHIN=`dirname $line`
FILENAME=`cat $line | awk -F"/" '{print $NF}'`

cd ${PATHIN}
grep "max_val" ${FILENAME} > Log_${COUNT}.log

done < input_file

您只需更改 input_file 作为包含所有数据的文件的名称。

答案2

dirname 例如,您搜索的命令用于文件:

/dec/async/result/debug_TFS16.log

如果你执行

dirname /dec/async/result/debug_TFS16.log

你会得到

/dec/async/result

答案3

使用 bash 功能将文件名读入数组,

readarray -t list < input
for((i=0; i<${#list[@]}; i++))
do 
  grep max_val "${list[i]}" > log"$((i+1))".txt
done

这会将文件名读入数组变量list,然后循环遍历该数组的索引 (in i),并对相应的文件名运行 grep 命令,并将输出重定向到所需的日志文件名。 Bash 数组的索引为零,因此我将数组索引加一来创建文件名。

答案4

您可以使用循环跳过文件中的每一行while read。这是一个示例文件,名为“samplefile.txt”。

root@server :~$ cat samplefile.txt
line 1
line #2
line3
 line 4
#line5 shouldn't print
  # line 6 shouldn't print either
line 7 should print

如果您想添加忽略以“#”开头的行的功能,可以将其添加到命令中。

root@server :~$ while read line ; do echo -e "$line" | egrep -v '\s*^#'; done < samplefile.txt
line 1
line #2
line3
line 4
line 7 should print

请注意,有些行以空格开头,但后面的输出没有显示这一点。这可能会也可能不会影响您的场景。

相关内容