首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shell中命令的异步执行

Shell中命令的异步执行
EN

Stack Overflow用户
提问于 2014-08-31 11:46:16
回答 2查看 91关注 0票数 0

我有个csv文件。目前,我的脚本正在做的是:

  1. 对两个文件进行并行排序。
  2. 步骤1完成后,我将在这两个文件中剪切一个列。
  3. 在第二步之后,我正在区分从第二步得到的文件。

我想要做的是,步骤1完成的那一刻,我想转到csv的下一行,并对该行执行排序命令(其中提到了要根据步骤1排序的2个文件)。这意味着当第1行在第2步时,第2行应该在第1步。我该怎么做呢?我需要某种数据流水线吗?

很抱歉给你造成了混乱。我现在正在做的事情的伪代码:

代码语言:javascript
复制
  sort col1_row1 > sorted_col1_row1 &
  sort col2_row1 > sorted_col2_row1 &

  wait for sorts

  cat sorted_col1_row1 | cut -f1-3 > cut_sorted_col1_row1 &
  cat sorted_col2_row1 | cut -f1-3 > cut_sorted_col2_row1 &

  wait for cat

  diff cut_sorted_col1_row1 cut_sorted_col2_row1 > diff_row1

当对row1文件进行排序时,我希望程序跳到row2上,以便在row1文件上运行cat和diff来执行。

EN

回答 2

Stack Overflow用户

发布于 2014-08-31 15:42:23

你的描述很难理解。这就是你想要的吗?

代码语言:javascript
复制
( sort file1 | cut ... > step2.out ) &
sort file2 > step3.out &
wait
diff step2.out step3.out
票数 0
EN

Stack Overflow用户

发布于 2014-08-31 22:30:06

从表面上看,您应该使用以下内容:

代码语言:javascript
复制
for suffix in row1 row2
do
    for prefix in col1 col2
    do
        base=${prefix}_${suffix}
        (sort $base | tee sorted_$base | cut -f1-3 > cut_sorted_$base) &
    done
    wait
    diff cut_sorted_col[12]_$suffix > diff_${suffix}
done

我假设您需要sorted_col1_row1文件,这些文件是sort的输出。如果您不需要它们,请删除子命令的tee部分。

没有理由在两个cut启动之前将并行性与两个排序分离开来。无论如何,sort命令很有趣;它必须读取所有输入,然后才能生成任何输出,至少在基本的排序操作模式下是这样。当它用于合并时,它可以在读取所有输入之前生成输出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25591668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档