【问题标题】:Concatenate output of two commands into one line将两个命令的输出连接到一行
【发布时间】:2011-07-23 20:44:34
【问题描述】:

我这里有一个非常基本的 shell 脚本:

for file in Alt_moabit Book_arrival Door_flowers Leaving_laptop
do
    for qp in 10 12 15 19 22 25 32 39 45 60
    do
        for i in 0 1
        do
            echo "$file\t$qp\t$i" >> psnr.txt
            ./command > $file-$qp-psnr.txt 2>> psnr.txt
        done
    done
done

command 计算一些 PSNR 值并将详细摘要写入文件中,以针对 fileqpi 的每个组合。没关系。

2>> 输出我真正需要的一行信息。但是当执行时,我得到:

Alt_moabit  10  0
total   47,8221 50,6329 50,1031
Alt_moabit  10  1
total   47,8408 49,9973 49,8197
Alt_moabit  12  0
total   47,0665 50,1457 49,6755
Alt_moabit  12  1
total   47,1193 49,4284 49,3476

然而,我想要的是:

Alt_moabit  10  0    total  47,8221 50,6329 50,1031
Alt_moabit  10  1    total  47,8408 49,9973 49,8197
Alt_moabit  12  0    total  47,0665 50,1457 49,6755
Alt_moabit  12  1    total  47,1193 49,4284 49,3476

我怎样才能做到这一点?

(如果您认为有更合适的标题,请随时更改标题)

【问题讨论】:

  • 正是我今天所需要的!谢谢!

标签: bash shell concatenation


【解决方案1】:

您可以将 -n 选项传递给您的第一个 echo 命令,因此它不会输出换行符。


作为一个快速演示,这个:

echo "test : " ; echo "blah"

会得到你:

test : 
blah

两个输出之间有一个换行符。


同时,第一个 echo 使用 -n

echo -n "test : " ; echo "blah"

将为您提供以下输出:

test : blah

两个输出之间没有任何换行符。

【讨论】:

    【解决方案2】:

    (GNU 版本的)echo 实用程序有一个 -n 选项来省略尾随的换行符。在你的第一个回声上使用它。为了便于阅读,您可能必须在第一行之后或第二行之前放置一些空格。

    【讨论】:

      【解决方案3】:

      您可以使用printf 代替echo,即better for portability reasons

      【讨论】:

        【解决方案4】:

        printf 是解决您的问题的正确方法(+1 kurumi),但为了完整起见,您也可以这样做:

        echo "$file\t$qp\t$i $( ./command 2>&1 > $file-$qp-psnr.txt )" >> psnr.txt

        【讨论】:

        • 我猜没有正确的方法。 drysam 的解决方案对我有用,他是第一个回答的人。不过感谢这个有趣的单线! :)
        • 也许 'correct' 太强了,但是 printf 会比 echo -n 更便携。
        【解决方案5】:

        如果您只想将输出打印到控制台,echo -n 可能会起作用,但如果您希望将输出重定向到文件,则它不会起作用。

        如果您希望将连接的输出重定向到文件,这将起作用:

        echo "Str1: `echo "Str2"`" >> file
        

        【讨论】:

          猜你喜欢
          • 2019-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-19
          • 1970-01-01
          • 2016-12-04
          • 1970-01-01
          • 2013-11-08
          相关资源
          最近更新 更多