我遇到过一些类似的情况,我可以将单核绑定任务分解为多个部分,并将每个部分作为单独的作业在 bash 中运行以将其并行化,但我很难将返回的数据整理回单个数据溪流。到目前为止,我的天真的方法必须创建一个临时文件夹,跟踪 PID,让每个线程使用其 pid 写入文件,然后在所有作业完成后读取所有 pid 并将它们按 PID 生成的顺序合并到一个文件中。有没有更好的方法来使用 bash/shell 工具来处理这种多入一出的情况?
主页
/
user-509524
guest's questions
guest
Asked:
2022-02-19 12:02:08 +0800 CST
我对 m 个文件有 n 个单独的非固定 grep。我只需要知道每个文件中是否至少有 1 个匹配项,但每个模式都需要这个。我目前制作了 n 个单独的 grep,以便以后可以将它们全部合并,但它非常慢并且有些文件很大。
有没有办法替换这些不需要我读取所有文件 n 次(只要我可以将模式(不匹配)匹配到包含匹配项的文件,就不需要是单独的文件)。grep -f 看起来很有希望,但它显示匹配任何模式的文件,而不是匹配每个模式的文件。
稍后合并到 1 个大文件中的内容:
grep -liE pattern1 file_glob* > temp_pattern1.txt && sed s/^/escapedpattern1 / temp_pattern1.txt
grep -liE pattern2 file_glob* > temp_pattern2.txt && sed s/^/escapedpattern2 / temp_pattern2.txt
...
grep -liE patternN file_glob* > temp_patternN.txt && sed s/^/escapedpatternN / temp_patternN.txt
temp_pattern1.txt
pattern1 /path/to/file1
pattern1 /path/to/file2
pattern1 /path/to/file3
temp_pattern2.txt
pattern2 /path/to/file1
pattern2 /path/to/file3
...
temp_patternN.txt
pattern N /path/to/fileM
guest
Asked:
2022-01-11 08:21:14 +0800 CST
我有一个脚本 print.sh:
#!/bin/bash
echo printing provided args:
for i in "$@"; do
echo -e "\t${i}"
done
如果我在提示符下执行此操作,a=$(. print.sh ); echo "${a}"
那么我将获得printing provided args:
存储的输出
我测试命令替换的主要脚本如下所示:
#!/bin/bash
function func_to_call_sub_scrp
{
# Call sub-script
capture="$(. $1 $2 $3)"
echo -e "captured output:
\t\t${capture}"
}
echo "Run function to call sub script without parameters passed. "
func_to_call_sub_scrp print.sh
echo ""
echo "Run function to call sub script with parameters passed."
func_to_call_sub_scrp print.sh xx yy
这输出:
Run function to call sub script without parameters passed.
captured output:
printing provided args:
print.sh
Run function to call sub script with parameters passed.
captured output:
printing provided args:
xx
yy
第二个调用将 xx 和 yy 发送到 print.sh,这与预期的一样。但是,当我发送“print.sh”“”“”命令替换调用 print.sh 并将它作为它的 $1 发送 print.sh 而不是发送它“”和“”
我的问题是,当没有其他输入时,如何将 $1 作为参数传递给打印脚本?我期望"$(. $1 $2 $3)"
成为"$(. print.sh )"
或"printing provided args:"
曾经返回。