在同一行输出两个命令
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。
这个问题我已经看过好几次了,但是我无法解决问题。
我有以下命令:
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。