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