2012-09-20 78 views
1

我有一個腳本,似乎工作:我有一個文件「插入」,其中包含陣列打印輸出有問題

+004.1  
-005.2 

我想插入這些值時,搜索模式條件滿足每個文件在我的目錄中。下面的腳本不運行,其實當我附和陣列的一部分似乎罰款:

例(看看下面的腳本):

echo ${array1[0]} prints to +004.2 

但是,當我想這在AWK插入(請參見下面的腳本):

printf("%s\n", "  Latitude (N is +)  : """ '${array1[COUNTER]}' " ",), 

只打印4.1,我想這要打印"+004.1"

任何幫助表示讚賞。更多請看下面的腳本。

#********************************************************************** 
#!/bin/bash 
COUNTER=0 
array1=(`cat "insert"`) 

for i in *.log 
do 

    echo ${array1[COUNTER]} 

    cat $i | awk '{ if ($0 ~ /Letter/) { 
         printf("%s\n", "  Latitude (N is +)  : """ '${array1[COUNTER]}' " ", $0); 
        } else { 
         print $0; 
        } 
        }' > out$COUNTER 

    let COUNTER=COUNTER+1 

done 
+0

http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks –

回答

1

使用printf()以及諸如%+06.1f的格式。

... 
printf("%s %+06.1f %s\n", " Latitude (N is +) : ", '${array1[COUNTER]}', $0); 
... 

我減少了字符串中的空格數,所以行不會太長。

由於原代碼使用printf("%s\n", ...one string expression...)和shell變量的值格式正確,你也可以做的工作:

... 
print " Latitude (N is +) : '${array1[COUNTER]}' " $0; 
... 

這將嵌入作爲格式化殼成是字符串字符串前綴爲$0,並使用print輸出整個批次。


該shell代碼有資格獲得UUOC獎勵。它可以通過命令行變量傳遞給awk一個好主意,太:

awk -v latitude=${array1[COUNTER]} \ 
    '{ if ($0 ~ /Letter/) printf("%s %+06.1f ", " Latitude (N is +) : ", latitude); 
     print $0; 
    }' $i > out$COUNTER 

這是一個有點更緊湊也不能少清晰(我的想法)。如果需要在行開始之前輸出額外的信息,然後無條件地打印行的其餘部分。如圖所示傳遞變量可以避免在腳本中打破單引號。

另請注意,shebang行#!/bin/bash必須是文件中的第一行以產生任何效果。 與所有明星的箱子評論線真的沒有太大的幫助;我會刪除它(他們 - 我已經刪除了最後一個,但需要留下領先的位置才能討論這個問題)。