我有一个脚本s1
,输出以','分隔的数字列表1,2,3,4
。现在,我想将这些数字s2
作为参数提供给脚本,以便s2将在每个数字上运行并在单独的行中输出其结果。例如,如果s2将数字乘以2,这就是我要查找的结果:
2
4
6
8
我现在正在做的是:
s1 | xargs -d "," | xargs -n1 s2
但是我觉得我这样做是愚蠢的!所以我的问题是:
正确的做法是什么?
我的解决方案的问题在于,它两次调用xargs并两次对输入进行迭代,这当然对我来说是不合理的。答案xargs -d "," -n1
似乎不错,但我不确定是否只重复一次。如果是这样,请在您的回答中确认这一点,我会接受。顺便说一句,我宁愿不使用Perl,因为它仍在迭代两次,而且Perl在许多系统上可能不存在。
1
如果可行,为什么称其为愚蠢。如果执行时间很重要,那又是另一回事了
—
George Udosen
试试这个
—
George Udosen
s1 | xargs -d "," -n1 s2
我怀疑其中一些问题误解了迭代的影响。遍历诸如关联数组之类的元素中的元素是不好的,这是因为遍历该数据结构的开销很大,但是“迭代”通常并不是固有的不好。具体地说,逐行读取STDIN中的数据并不是很大的性能问题。这里的性能问题更多是产生新流程和建立管道的成本。只要您不经常这样做(就像在循环中那样),担心xargs的性能可能就是过早优化的一个例子。
—
丹尼绍尔