2011-08-27 107 views
3

我很不熟悉awk,但我正在尋找一種方法來遍歷目錄中的所有文件並執行簡單的awk命令。我的命令是一個簡單的替換,它用兩個空格替換所有的選項卡。使用awk遍歷文件列表?

awk '{gsub("\t"," ");print}' 

這怎麼能擴展到循環目錄並執行所有文件的命令?

回答

3

的文件傳遞給AWK當然,在命令行:`

$ awk 'program' * 

,不過也許它更容易使用

$ perl -pe 's/\t/ /g' * 

或者,如果您希望有一個就地版它,簡單地說:

$ perl -i.orig -pe 's/\t/ /g' * 
+0

你知道嗎,如果perl被用來連接另一個替代ex。 'awk'{gsub(「\ t」,「」); print}'| sed「s/foo/bar/g」'?如果是這樣,那麼perl可能是你說的最好的解決方案。 – drbunsen

+0

@ dr.bunsen:是的,當然,只是用分號分隔命令:'perl -pe's/\ t// g; s/foo/bar/g'' – tchrist

+0

謝謝!我認爲生病開始嘗試學習Perl,這些命令作爲一個線程真的很方便! – drbunsen

0

使用查找和輸出重定向到AWK:

find . -type f | xargs awk '{gsub("\t"," ");print}' 
+0

這看着文件名,而不是文件內容。 – tchrist

+0

@tchrist:編輯。 – Heisenbug

0

你可以用一個awk命令

awk -F"\t" '{$1=$1;print $0 >FILENAME}' OFS=" " file 
1

做Heisenbug的想法

find . -type f -exec awk '{gsub("\t"," ");print}' {} \; 

它避免調用諸如xargs的另一個程序的改進版本。我做了一些測試似乎有點快。