Unix 使用awk遍历文件列表?
我对Unix 使用awk遍历文件列表?,unix,awk,Unix,Awk,我对awk非常不熟悉,但我正在寻找一种方法来遍历目录中的所有文件并执行一个简单的awk命令。我的命令是一个简单的替换,用两个空格替换所有选项卡 awk '{gsub("\t"," ");print}' 如何将其扩展为在目录中循环并对所有文件执行命令?使用查找并将输出重定向到awk: find . -type f | xargs awk '{gsub("\t"," ");print}' 通过命令行将文件传递给awk当然:` $ awk 'program' * 但它可能更容易使用 $ per
awk
非常不熟悉,但我正在寻找一种方法来遍历目录中的所有文件并执行一个简单的awk
命令。我的命令是一个简单的替换,用两个空格替换所有选项卡
awk '{gsub("\t"," ");print}'
如何将其扩展为在目录中循环并对所有文件执行命令?使用查找并将输出重定向到awk:
find . -type f | xargs awk '{gsub("\t"," ");print}'
通过命令行将文件传递给awk当然:`
$ awk 'program' *
但它可能更容易使用
$ perl -pe 's/\t/ /g' *
或者,如果您希望进行就地编辑,只需:
$ perl -i.orig -pe 's/\t/ /g' *
您可以使用一个
awk
命令来完成
awk -F"\t" '{$1=$1;print $0 >FILENAME}' OFS=" " file
海森堡想法的改进版本
find . -type f -exec awk '{gsub("\t"," ");print}' {} \;
它避免调用另一个程序,如xargs。通过我做的一些测试,它似乎要快一点。一个有用的片段,它显示了awk处理文件列表的过程,就像它是一个流一样(注意行号是如何使用的) 示例输出
A) ssh-dss AAAAB3N...WhdJHA== bob@your.uncle
B) ssh-ed25519 AAAAC3N...9a5kCpbT bob@your.uncle
C) ssh-rsa AAAAB3N...fzh3oUGZ bob@your.uncle
它关注的是文件名,而不是文件内容。您知道是否可以使用perl将另一个替换连接在一起,例如
awk'{gsub(“\t”);print}sed“s/foo/bar/g”
?如果是这样的话,perl可能是您所说的最好的解决方案。@dr.bunsen:是的,当然,只需用分号分隔命令:perl-pe的/\t//g;s/foo/bar/g'
谢谢!我想我将开始学习perl,这些命令作为一行程序非常方便!
A) ssh-dss AAAAB3N...WhdJHA== bob@your.uncle
B) ssh-ed25519 AAAAC3N...9a5kCpbT bob@your.uncle
C) ssh-rsa AAAAB3N...fzh3oUGZ bob@your.uncle