2015-04-21 28 views
1

我已经看过这个问题几次了,但是我无法工作的解决方案。在同一行输出两个命令

我有以下命令:

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输出,回声$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

但是我ge t

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

原始数组中的内容是什么?也许最好是从那里开始,而不是通过你已经拥有的管道。 –

+1

如果您向我们提供原始输入和预期输出,那么我认为这可以全部在一个命令中完成,而不是人们试图将某些东西放到命令末尾。 –

+0

谢谢 - 添加了'printf'%s \ n'“$ {fa [@]}'' – brucezepplin

回答

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

+0

感谢马丁 - 这在我的设置 – brucezepplin

2

你可以尝试使用这样的事情:

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

这遍历文件和打印11号线从阵列fa,其索引每次迭代i增加1片并肩作战。

+0

中工作,谢谢汤姆这个工作。我喜欢数组....相信他们更多! – brucezepplin

+0

@brucezepplin它也更短,更高效! –