在同一行输出两个命令

时间:2015-04-21 08:07:04

标签: bash sed echo concatenation

我已经看过几次这个问题了,但我无法解决这些问题。

我有以下命令:

printf '%s\n' "${fa[@]}" | xargs -n 3 bash -c 'cat *-$2.ss | sed -n 11,1p ; echo $0 $1 $2;'

,其中

printf '%s\n' "${fa[@]}"

O00238 115 03
O00238 126 04

cat *-$2.ss给出:

   1 D C   0.999  0.000  0.000
   2 L C   0.940  0.034  0.012
   3 H C   0.971  0.005  0.015
   4 P C   0.977  0.005  0.009
   5 T C   0.970  0.009  0.018
   6 L C   0.977  0.006  0.011
   7 P C   0.864  0.027  0.014
   8 P C   0.966  0.018  0.011
   9 L C   0.920  0.038  0.039
  10 K C   0.924  0.043  0.039
  11 D C   0.935  0.036  0.035
  12 R C   0.934  0.023  0.053
  13 D C   0.932  0.022  0.046
  14 F C   0.878  0.041  0.088
  15 V C   0.805  0.031  0.198
  16 D C   0.834  0.039  0.108
  17 G C   0.882  0.019  0.071
  18 P C   0.800  0.031  0.132
  19 I C   0.893  0.039  0.070
  20 H C   0.823  0.024  0.179
  21 H C   0.920  0.026  0.070
  22 R C   0.996  0.001  0.002

运行命令然后生成

  11 D C   0.935  0.036  0.035
O00238 115 03
  11 K C   0.449  0.252  0.270
O00238 126 04

偶数行是sed -n 11,1p的输出,奇数行是echo $0 $1 $2的输出

如何在同一行上配对输出,即

  11 D C   0.935  0.036  0.035 O00238 115 03
  11 K C   0.449  0.252  0.270 O00238 126 04

我试过了:

printf '%s\n' "${fa[@]}" | xargs -n 3 bash -c 'cat *-$2.ss | {sed -n 11,1p ; echo $0 $1 $2;} | tr "\n" " "'

如此处所示:Concatenate in bash the output of two commands without newline character

但是我得到了

O00238: -c: line 0: syntax error near unexpected token `}'
O00238: -c: line 0: `cat *-$2.ss | {sed -n 11,1p ; echo $0 $1 $2;} | tr "\n" " "'

有什么问题?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用以下内容:

i=0
for f in *-"$2".ss; do printf '%s %s\n' "$(sed -n '11p' "$f")" "${fa[$((i++))]}"; done

这将循环遍历您的文件,并在数组fa的一个切片旁打印第11行,其索引i每次迭代增加1。

答案 1 :(得分:1)

我无法重现您的设置,但

printf "O00238 115 03\nO00238 126 04" | xargs -n 3 bash -c 'cat test.dat | sed -n 11,1p | tr -d "\n"; echo " $0 $1 $2"'

给出

11 D C   0.935  0.036  0.035 O00238 115 03
11 D C   0.935  0.036  0.035 O00238 126 04

哪个适用于您的情况。我刚刚删除了sed命令的换行符。