我有一个脚本可以让我得到我想要的结果。我想提高脚本的性能。
我的脚本从文件file1.txt
获取参数。
内容如下:
table1
table2
table3
and so on
现在当我使用下面的while
语句时,脚本按顺序运行。
while
声明如下:
while IFS=',' read -r a; do import.sh "$a"; done < file1.txt
现在,当我在bash中使用xargs
max-procs
实用程序时,脚本基于no-procs并行运行。
xargs
声明如下:
xargs --max-procs 10 -n 1 sh import.sh < file1.txt
现在我有另一个脚本
此脚本接收来自文件file2.txt
的参数。
内容如下:
table1,db1
table2,db2
table3,db3
and so on
当我使用while
语句时,脚本运行良好。
while IFS=',' read -r a b; do test.sh "$a" "$b"; done < file2.txt
但是当我使用teh xargs
语句时,脚本会给我usage
错误。
xargs
声明如下。
xargs --max-procs 10 -n 1 sh test.sh < file2.txt
error
声明如下:
Usage : test.sh input_file
为什么会这样?
我该如何纠正这个?
答案 0 :(得分:1)
你的第二个脚本test.sh
需要两个参数,但是xargs
只给它一个(一个词,在这个例子中是整行)。您可以通过先将逗号,
转换为换行符(使用简单的sed
脚本)然后将每个调用传递两个参数(现为两行)传递给test.sh
(-n2
来修复它}):
sed s/,/\\n/g file2.txt | xargs --max-procs 10 -n2 sh test.sh
请注意,xargs
通过-d
选项支持自定义分隔符,如果file2.txt
中的每一行都以,
结尾,您可以使用它(但是你应该可能会删除每个第一个字段前缀的换行符。)