bash使用'while read'读取多个文件



当我有一个文本文件时,我想用bash逐行读取,命令看起来像:

while IFS='' read -r line || [[ -n "${line}" ]];
do
[code goes here]
done <(${filename})

现在,我有几个文件(名为 1.txt 到 10.txt(,它们都具有相同的行数 ( ~ 1600(。单独处理每个文件的 while 循环需要很长时间,有没有办法使用 while 语法并行读取和处理所有内容(即所有 10 个文件将同时读取,但单独处理(?例如:

While IFS='' read -r line || [[ -n "${line}" ]];
do
[code goes here]
done <(1.txt; 2.txt; 3.txt; ...)

或者除了创建 10 个单独的脚本之外,是否有更好的方法来实现所需的多文本处理?

总体目标是文件 1.txt - 10.txt 由 ~ 1600 个单独的 ID 组成,其中 [代码在此处] 部分将首先:

1( 逐行读取 ID

2( 基于 ID,将引用包含有关 ID 的信息的主文件,例如此特定 ID 发生的时间。

3( 基于这些提取的时间信息,我们现在以 2 分钟的增量在 1 小时前和 1 小时后构建文件。然后,我们引用这 60 个文件中的每一个,打开它们,然后从该文件中提取一行,最后将其转储到一个新文件中。

因此,该过程包括打开多个不同的文件进行引用。

您可以修改现有脚本以将文件名作为命令行参数。

例如,如果脚本名称为 process_file.sh$./process_file.sh <file_name>

您可以开发另一个支持脚本,其中包含文件和循环的列表,并调用此脚本并使用"&"将其推送到后台 例如。

declare -a arr=("1.txt" "2.txt" "3.txt")
for i in "${arr[@]}"
do
./process_file.sh $i &
done

这可能是您可以尝试检查的一种方法。

最新更新