谁能帮我写一个多线程外壳脚本
基本上我有两个文件,一个文件包含大约>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