2015-12-22 51 views
0

awk腳本我需要在上百個文件運行命令,我需要幫助,得到一個循環做到這一點:如何運行多個文件

  1. 有輸入文件的列表/路徑/ DIR/file1.csv,file2.csv,...,fileN.csv
  2. 需要在所有這些輸入文件上運行腳本
  3. 腳本類似於:command input =/path/dir/file1.csv output = output1

我試過類似的東西: for f in /path/dir/file*.csv; do command,但我如何才能每次都讀取和寫入新文件? 謝謝....

+0

拿到書有效AWK編程,第4版,由阿諾德·羅賓斯和不寫一個shell循環 - 這是錯誤的做法(請參閱http://unix.stackexchange.com/q/169716/133219)並且完全沒有必要。如果您發佈樣本投入和預期產出,我們可以幫助您。請將您的問題中出現的每個單詞「腳本」更改爲「shell腳本」或「awk腳本」,以便在每個語句中清楚說明您正在討論的內容。 –

回答

0

試試這個,(改變/path/to/data的正確路徑後,同樣的,/path/to/awkscript等地,指向您的測試數據。)

#!/bin/bash 
cd /path/to/data 
for f in *.csv ; do 
    echo "awk -f /path/to/awkscript \"$f\" > ${f%.csv}.rpt" 
    #remove_me awk -f /path/to/awkscript "$f" > ${f%.csv}.rpt 
done 

使腳本「可執行」與

chmod 755 myScript.sh 

echo版本將幫助您確保腳本正在按計劃進行工作。您仍然必須仔細檢查輸出或者處理數據副本,以免破壞基線數據。

你可以採取的最後一次迭代

awk -f /path/to/awkscript myFileLast.csv > myFileLast.rpt 

和複製/粘貼的輸出CMD-線,以確認它的工作。

當你舒服的awk腳本工作,因爲你需要,那麼註釋掉echo awk ..線,並取消了字#remove_me(並保存您的bash腳本)。

0
for f in /path/to/files/*.csv ; do 
    bname=`basename $f` 
    pref=${bname%%.csv} 
    awk -f /path/to/awkscript $f >  /path/to/store/output/${pref}_new.txt 
done 

希望這會有所幫助,我對我的黑莓所以可能會有錯別字

+0

我會從這開始,因爲它看起來更簡單...我的問題似乎是腳本本身需要在語法中包含input =和output = .....所以我不能真正指定一個路徑。例如。我的腳本會從文件更改爲文件:command input =/path/dir/file1.csv output = output1,then command input =/path/dir/file2.csv output = output2 ..... – szilard