2015-02-08 34 views
0

正在Windows 7awk:連接文件時如何包含文件名?

下運行GNUwin32在一個目錄多個文件與像這樣的文件名:

chem.001.txt 
chem.002.b4.txt 
chem.003.md6.txt 
(more files.txt) ... 

在其目前的形式,沒有任何文件,包括文件名。

需要清理這些文件以備後用。 想要將所有文件連接成單個文件。 但是還需要在連接內容的開始處包含文件名,以便稍後將原始文件與乾淨的數據關聯起來。

例如,單一,連結文件(new_file.txt)是這樣的:

chem.001.txt delimiter (could be a tab or pipe) followed by text from chem.001.txt... 
chem.002.b4.txt delimiter followed by text from chem.002.b4.txt ... 
chem.003.md6.txt delimiter followed by text from chem.003.md6.txt ... 
etc. ... 

然後將清洗連結文件,並根據需要解析的內容。

awk - gawk可以針對每個文件分成「NEW_FILE必須與文件名($ 1)相關聯,該文件中的文本與($ 2),然後關聯的裝置,按順序,打印($ 1,$ 2)。 TXT',但我一直無法使它工作。

如何做到這一點?

回答

2

在foo.awk將這個:

BEGIN{ RS="^$"; ORS=""; OFS="|" } 
{ gsub(/\n[\r]?/," "); print FILENAME, $0 > "new_file.txt" } 

,然後執行它

awk -f foo.awk <files> 

其中<files>然而您提供在Windows中的文件名列表。它將GNU awk用於多字符RS,讓您將整個文件作爲單個記錄進行讀取。

+0

我做錯了什麼。我在目標文件的目錄中有foo.awk和.bat程序。 foo.awk指導輸出如下:BEGINFILE {print FILENAME>「C:\ data \ additives \ new.txt」} {print>「C:\ data \ additives \ new.txt」}。 foo.awk程序讀取數據如下:C:\ bin \ gnuwin32 \ bin \ awk -f foo.awk * .txt。一個問題是數據在D上:我注意到之前我需要將目標數據從D:移到C:for awk才能正常工作。我在執行代碼時是否有錯誤? – 2015-02-08 17:15:20

+0

我將數據移動到C:同時檢查awk的版本。它是3.1.6.2962 – 2015-02-08 17:25:37

+0

已將2個程序移到他們自己的目錄(C:\ data \ additives_program)。 foo.awk看起來像這樣:BEGIN {RS =「^ $」; ORS = 「」; OFS = 「|」 } {gsub(/ \ n [\ r]?/,「」);} {gsub打印FILENAME,$ 0>「C:\ data \ additives \ new.txt」} .bat程序如下所示:C:\ bin \ gnuwin32 \ bin \ awk -f foo.awk C:\ data \ additives_combo \ *。文本。尚未得到結果。是否有一個調試步驟,我應該添加看看有什麼失敗? – 2015-02-08 17:38:35