新建一个文件看下有如下测试数据
hadoop@hadoop:~$ cat test.txt
weihongrao is stupy
hohai university
first time to shenzhen is 2009
now i will go
end here
shell 文件如下
hadoop@hadoop:~$ cat test.sh
#!/bin/bash
if [[ $# > 0 ]]; then
echo "parameter $* is given";
else
echo "no parameter is given"
fi
1. hadoop@hadoop:~$ cat test.txt |xargs bash test.sh
parameter weihongrao is stupy hohai university first time to shenzhen is 2009 now i will go end here is given
hadoop@hadoop:~$
#可以看出test.sh执行了一次而已,xargs 把管道的所有输出全部传给了下一个命令
2.hadoop@hadoop:~$ cat test.txt |xargs -0 bash test.sh
parameter weihongrao is stupy
hohai university
first time to shenzhen is 2009
now i will go
end here
is given
#test.sh同样也只是执行了一次,但是输出的结果保留了源文件的换行符号
3.hadoop@hadoop:~$ cat test.txt |xargs -i bash test.sh {}
parameter weihongrao is stupy is given
parameter hohai university is given
parameter first time to shenzhen is 2009 is given
parameter now i will go is given
parameter end here is given
hadoop@hadoop:~$
#使用-i之后xargs会吧前一个的每个输出都传给下一个命令而且是分别执行下一个命令