2015-12-15 131 views
1

我想以自動的方式編寫簡單的shell腳本。 解析我的字符串並將解析的字符串連接到原始文件上下文中。在shell腳本中對awk使用變量時出現問題

但是,當我通過使用awk命令來完成時,雖然我確定我查找的字符串被解析得很好,但它不起作用。

以下是我的代碼。

for file in ./*.txt 
do 
    fileName="$(string $file | rev | cut -d. -f2 | rev)" 
    echo $fileName 
    awk '{print($2"\t"$3"\t"$4"\t""0""\t""0""\t"$5"\t"$6"\t"$7"\t"$8"\t"$fileName)}' $file 
done 

你可以給點建議嗎?

+0

'AWK「{打印$ 2,$ 3}」 OFS ='\ t''比'awk'{print $ 2「\ t」$ 3}更容易閱讀「' –

回答

0

很確定你只是想引用shell變量$ filename。一種選擇是改變報價方式(用單引號開始,並用雙引號結束),並使用:

awk '{print $2, $3, $4, "0", "0", $5, $6, $7, $8, "'"$fileName\" }" OFS=\\t $file 

你需要有大約$文件名雙引號,以使外殼插值它作爲一個變量。你可以在整件事情上使用雙引號,並且寫上awk "{print \$2, ...。有一個多種方式做必要的引用,但是它是更加可讀傳遞殼變量作爲AWK變量:

awk '{print $2, $3, $4, "0", "0", $5, $6, $7, $8, f }' OFS=\\t f="$fileName" $file 
+0

謝謝。您的評論對於使用shell腳本非常有用。 – sclee1