2011-08-27 106 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的另一个程序的改进版本。我做了一些测试似乎有点快。