多线程外壳脚本



谁能帮我写一个多线程外壳脚本

基本上我有两个文件,一个文件包含大约>10K 行(main_file),另一个文件包含大约 200 行(sub_file)。这 200 行包含主文件排序的重复字符串。我正在尝试使用以下命令为每个字符串制作单独的文件到其他文件

我已经收集了重复到sub_file中的字符串。字符串随机存在于main_file中。

a=0
while IFS= read -r line
do
a=$(($a+1));
users[$a]=$line
egrep "${line}" $main_file >> $line
done <"$sub_file"

如果我在单线程中使用,则需要更多时间,因此请考虑使用多线程进程并在最短的时间内完成该过程。

帮我...

你需要

的工具是 gnu parallel

parallel egrep '{}' "$mainfile" '>' '{}' < "$sub_file"

您可以使用选项调整处理的作业数 -P

parallel -P 4 egrep '{}' "$mainfile" '>' '{}' < "$sub_file"

有关详细信息,请参阅手册。

顺便说一下,为了确保您不会两次处理一行,您可以使输入唯一:

awk '!a[$0]++' "$sub_file" | parallel -P 4 egrep '{}' "$mainfile" '>' '{}'

注意:从我之前的帖子中发布。这不是直接适用的,但与调整非常相似

我有一个文件1.txt包含以下内容。

-----cat 1.txt-----
1234
5678
1256
1234
1247

我的文件夹中还有 3 个文件

-----ls -lrt-------
A1.txt
A2.txt
A3.txt

这三个文件的内容是具有不同数据值的相似格式(所有三个文件都是制表符分隔的)

-----cat A1.txt----
A   X   1234    B   1234
A   X   5678    B   1234
A   X   1256    B   1256

-----cat A2.txt----
A   Y   8888    B   1234
A   Y   9999    B   1256
A   X   1234    B   1256

-----cat A3.txt----
A   Y   6798    C   1256

我的目标是在所有 A1、A2 和 A3(仅适用于 TAB 分隔文件的第 3 列)上搜索 1 中的文本.txt并且输出必须重定向到文件匹配项.txt如下所示。

Code:
/home/A1.txt:A   X   1234    B   1234
/home/A1.txt:A   X   5678    B   1234
/home/A1.txt:A   X   1256    B   1256
/home/A2.txt:A   X   1234    B   1256

以下应该有效。

cat A*.txt | tr -s 't' '|' > combined.dat
{ while read myline;do
recset=`echo $myline | cut -f19 -d '|'|tr -d 'r'`
var=$(grep $recset 1.txt|wc -l)
if [[ $var -ne 0 ]]; then
echo $myline >> final.dat 
fi
done } < combined.dat
{ while read myline;do
recset=`echo $myline | cut -f19 -d '|'|tr -d 'r'`
var=$(grep $recset 1.txt|wc -l)
if [[ $var -ne 0 ]]; then
echo $myline >> final2.dat 
fi
done } < combined.dat

使用AWK

awk 'NR==FNR{a[$0]=1}$3 in a{print FILENAME":"$0}' 1.txt A* > matches.txt

用于管道分隔

awk –F’|’ 'NR==FNR{a[$0]=1}$3 in a{print FILENAME":"$0}' 1.txt A* > matches.txt 

最新更新