2014-09-03 119 views
0

這個問題是跟我之前關於讀取文件某些行的問題的後續。 我讀我的文件如下:bash腳本文件讀取,bash刪除空格

while read line 
do 
    if [ "$line" == "SUMMARY OF POLARIZATION CALCULATION" ]; then 
     for i in {1..9} 
     do 
      read line 
      echo $line >> ../../Summary.out 
     done 
     break 
    fi 
done < ../Tutorial1_1.out 

,看起來像這樣:

. 
. 
. 
O (0.0000, 0.5000, 0.4834) sp(1) 6.00 [ 0.000000e+00, 1.884956e+01, 1.822516e+01] 
--------------------------------------------------------------------------------------- 
Total ionic phase (rad)  sp(1)  [ 7.539822e+01, 7.539822e+01, 1.119960e+02] 
Total ionic phase wrap. (rad) sp(1)  [ 8.633172e-11, 8.633172e-11, -1.101384e+00] 
Ionic polarization (C/m2)  sp(1)  [ 1.365657e-11, 1.365657e-11, -1.760570e-01] 
======================================================================================= 

SUMMARY OF POLARIZATION CALCULATION 
======================================================================================= 
Value       | spin | dir(1) | dir(2) | dir(3) 
--------------------------------------------------------------------------------------- 
Electronic polarization (C/m2)  sp(1) [-8.783054e-12, -8.828765e-13, 4.803326e-01] 
Ionic polarization (C/m2)   sp(1) [ 1.365657e-11, 1.365657e-11, -1.760570e-01] 
Tot. spin polariz.=Pion+Pel (C/m2) sp(1) [ 4.873517e-12, 1.277369e-11, 3.042756e-01] 
--------------------------------------------------------------------------------------- 
TOTAL POLARIZATION (C/m2)   both [ 4.873517e-12, 1.277369e-11, 3.042756e-01] 
======================================================================================= 

Completed using BerryPI version: +++Version 1.2 (Mar 12, 2014) 
... 

所以上面的代碼只取9條線後的「摘要..」和寫入Summary.out文件。然而,當它寫它搞砸了所有的空間,所以我得到如下:

======================================================================================= 
Value | spin | dir(1) | dir(2) | dir(3) 
--------------------------------------------------------------------------------------- 
Electronic polarization (C/m2) sp(1) [-8.783054e-12, -8.828765e-13, 4.803326e-01] 
Ionic polarization (C/m2) sp(1) [ 1.365657e-11, 1.365657e-11, -1.760570e-01] 
Tot. spin polariz.=Pion+Pel (C/m2) sp(1) [ 4.873517e-12, 1.277369e-11, 3.042756e-01] 
--------------------------------------------------------------------------------------- 
TOTAL POLARIZATION (C/m2) both [ 4.873517e-12, 1.277369e-11, 3.042756e-01] 
======================================================================================= 

我怎樣才能解決這個問題,有沒有會讀,準確地寫一個字符串,因爲它是在輸入文件中的標誌?

回答

5

我建議使用,而不是

echo "$line" >> ../../Summary.out 

echo $line >> ../../Summary.out 
+0

告訴我,如果我理解這個權利。沒有「」字符串變量被視爲一個數組,其中只有非空元素被打印,而與「」它把它看作一個字符串? – 2014-09-03 16:19:04

+0

最好不要把它看作一個數組(因爲'bash'也有數組)。相反,把'$ line'想象成一個宏。字符串'$ line'被變量'line'的內容替換,就像'echo ab'將簡單地打印'ab'(多個空格被一個空格替換),所以'echo $ line'將會處理任何'$ line'中的空格作爲簡單的字段分隔符運行,每個字段之間打印一個空格。 – chepner 2014-09-03 17:54:21

+0

但是,爲了保留前導和尾隨空白,你需要使用'IFS = read'而不是'read',並且引用'$ line'的擴展。 – chepner 2014-09-03 17:55:13