2011-03-27 12 views
13

Tôi có một kịch bản shell rất cơ bản ở đây:CONCATENATE đầu ra của hai lệnh vào một dòng

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 tính toán một số giá trị PSNR và viết một bản tóm tắt chi tiết vào một tập tin cho mỗi sự kết hợp của file, qpi. Đó là tốt.

Đầu ra 2>> xuất một dòng thông tin mà tôi thực sự cần. Nhưng khi thực hiện, tôi nhận được:

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 

Những gì tôi muốn, tuy nhiên, là thế này:

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 

Làm thế nào tôi có thể đạt được điều đó?

(Xin vui lòng thay đổi tiêu đề nếu bạn nghĩ rằng có một ai thích hợp hơn)

+0

Chính xác những gì tôi cần ngay hôm nay! Cảm ơn! – shiri

Trả lời

14

Tiện ích echo (phiên bản GNU) có tùy chọn -n để bỏ qua dòng mới. Sử dụng nó trên tiếng vọng đầu tiên của bạn. Bạn có thể sẽ phải đặt một số không gian sau dòng đầu tiên hoặc trước thứ hai để dễ đọc.

22

Bạn có thể vượt qua các tùy chọn -n lệnh echo đầu tiên của bạn, vì vậy nó không tạo ra một dòng mới.


Như một cuộc biểu tình nhanh chóng, điều này:

echo "test : " ; echo "blah" 

sẽ giúp bạn:

test : 
blah 

Với một dòng mới giữa hai kết quả đầu ra.


Trong khi điều này, với một -n cho echo đầu tiên:

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

sẽ giúp bạn có được kết quả như sau:

test : blah 

Nếu không có bất kỳ xuống dòng giữa hai đầu ra.

7

printf là cách chính xác để giải quyết vấn đề của bạn (+1 Kurumi), nhưng cho đầy đủ, bạn cũng có thể làm:

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

Tôi đoán không có cách nào _correct_. giải pháp của drysam làm việc cho tôi và anh ấy là người đầu tiên trả lời. Cảm ơn cho một lớp lót thú vị này mặc dù! :) – slhck

+1

Có thể 'đúng' quá mạnh, nhưng printf sẽ di động hơn echo-n. –