2010-11-10 69 views
0

我想在幾個文件上運行awk。我有文件名和文件路徑,但似乎無法連接這兩個文件。這是我曾嘗試過的:將幾個文件名擴展到bash中的一個目錄中

 

files=(a b c) 
directory=/my/dir 

awk $my_script "$directory/${files[@]}" 
 

它會喚醒第一個文件,並將其餘的單獨留下。我寧願不必在我的數組中添加完整路徑(這些值在幾個地方使用)。我想我想要擴展,但它似乎不適用於數組。我還能做什麼?

回答

5

使用模式替換(#表示類似^的正則表達式):${files[@]/#/$directory/}

+0

哇,這是奇怪的語法,但它實際上工作!謝謝。 – User1 2010-11-10 21:25:58

+1

它通過調用perl等基於標點符號的語言的精神來工作。你可能會聞到燃燒的羽毛。 – 2010-11-10 21:52:21

+1

不錯!但是你真正想要的是'$ {files [@] /#/ $ directory /}'。 – Johnsyweb 2010-11-11 00:23:49

1
for i in /my/dir/[abc]; do 
    awk $my_script "$i" 
done 

或者,如果你想實際上只是通過所有的文件名來一次awk的:

awk $my_script /my/dir/[abc] 

如果文件名不其實單個字母:

awk $my_script /my/dir/{file1,file2,file3,...} 
+0

但是,只有當文件名可以與您的模式相匹配時,纔會有效... – 2010-11-10 21:19:53

+0

請參閱我使用{file1,...}添加的部分。 – cdhowie 2010-11-10 21:21:29

相關問題