我有一个输入文件,每个值都有一行,如下所示:
100
200
我打算将每个输入值传递给任意命令(此处为 abc
),并生成一个输出文件,其中包含输入和相关输出。
假设我的命令 abc
将 100
转换为 tada
并将 200
转换为 jjhu
(实际生产版本会做一些不同的事情),我的预期输出是:
100 tada
200 jjhu
目前,我正在尝试使用以下命令:
cat jobs.txt | xargs -n 1 -I {} sh -c "echo {}; abc {}"
...但它的输出是:
100
tada
200
jjhu
如何纠正这种情况,将输出与输入放在同一行?
最佳答案
根本不要为这个任务使用xargs
。 -n 1
(为每行输入运行一个新的单独的 shell 进程)效率低下,并使您面临安全漏洞(考虑您的 100
是否 $(rm -rf $HOME)
进行一些转义以使其充当单个单词)。
以下可以在单个 shell 实例中运行,假设您的输入文件每一行都有一个值:
while IFS= read -r line; do
printf '%s %s\n' "$line" "$(abc "$line")"
done <jobs.txt
关于linux - 对于每一行输入,将该行与输出一起发出,将其传递给命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42685157/