如何根据行数复制输出

时间:2019-09-20 07:52:07

标签: shell

我有一个场景可以根据第一个命令结果的输出来复制第二个命令的值。

下面是示例:

第一个命令输出:

/raam/assigned/2018/sample/part01-examples.csv,100,20-jun-2018
/raam/assigned/2018/sample/part02-examples.csv,100,20-jun-2018
/raam/assigned/2018/sample/part03-examples.csv,100,20-jun-2018

第二个命令输出:

raam

预期结果: 我需要结合两个结果,并需要复制第二个命令的值,如下所示

/raam/assigned/2018/sample/part01-examples.csv,100,20-jun-2018,raam
/raam/assigned/2018/sample/part02-examples.csv,100,20-jun-2018,raam
/raam/assigned/2018/sample/part03-examples.csv,100,20-jun-2018,raam

2 个答案:

答案 0 :(得分:1)

简单的BASH:

for i in `1st command`; do  echo $i,$(2nd command); done

答案 1 :(得分:1)

另一个sed选项。只要您的第二个命令只有一个输出,就可以对第二个命令使用命令替换和对第一个命令使用进程替换,对sed使用替换形成一个逗号并将第二个命令的输出附加到末尾,例如

sed "s/^.*$/&,$(./2ndcmd.sh)/" < <(./1stcmd.sh)

1stcmd.sh文件提供以下输出:

$ ./1stcmd.sh
/raam/assigned/2018/sample/part01-examples.csv,100,20-jun-2018
/raam/assigned/2018/sample/part02-examples.csv,100,20-jun-2018
/raam/assigned/2018/sample/part03-examples.csv,100,20-jun-2018

2ndcmd.sh文件提供以下输出:

$ ./2ndcmd.sh
raam

使用/输出示例

$ sed "s/^.*$/&,$(./2ndcmd.sh)/" < <(./1stcmd.sh)
/raam/assigned/2018/sample/part01-examples.csv,100,20-jun-2018,raam
/raam/assigned/2018/sample/part02-examples.csv,100,20-jun-2018,raam
/raam/assigned/2018/sample/part03-examples.csv,100,20-jun-2018,raam

仔细检查一下,如果还有其他问题,请告诉我。

(由于< <(...)是bashism,如果您需要POSIX shell兼容性,则可以这样做:

$ ./1stcmd.sh | sed "s/^.*$/&,$(./2ndcmd.sh)/"

并将信息通过管道传递到您的sed命令)