我有一个csv文件。目前我的脚本正在做的是:
我想要做的是,第1步完成后我想转到下一行csv并执行该行的排序命令(根据步骤1提到要排序的2个文件)。这意味着当第1行在第2步时,第2行应该在步骤1上。我该怎么做?我需要某种数据流水线技术吗?
很抱歉这个混乱。我现在正在做的伪代码:
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以执行cat和diff运行在row1文件上。
答案 0 :(得分:0)
您的描述很难理解。这就是你想要的吗?
( sort file1 | cut ... > step2.out ) &
sort file2 > step3.out &
wait
diff step2.out step3.out
答案 1 :(得分:0)
从表面上看,你应该使用类似的东西:
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
命令很有意思;它必须先读取所有输入,然后才能生成任何输出,至少在其基本排序操作模式下。当它用于合并时,它可以在读取所有输入之前产生输出。