在同一行输出两个命令

output two commands on same line

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

我有以下命令:

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

哪里

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

O00238 115 03
O00238 126 04

cat *-.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 [=19=]

的输出

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

  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 *-.ss | {sed -n 11,1p ; echo [=15=]  ;} | 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 *-.ss | {sed -n 11,1p ; echo [=16=]  ;} | tr "\n" " "'

有什么问题?

我无法重现您的设置,但是

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

给予

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 命令的换行符。

你可以尝试使用这样的东西:

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

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