使用awk迭代文件列表?

时间:2011-08-27 14:43:27

标签: unix awk

我对awk非常不熟悉,但我正在寻找一种方法来遍历目录中的所有文件并执行简单的awk命令。我的命令是一个简单的替换,用两个空格替换所有选项卡。

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

如何将其扩展为遍历目录并对所有文件执行命令?

5 个答案:

答案 0 :(得分:3)

当然,在命令行上将文件传递给 awk :`

$ awk 'program' *

但可能更容易使用

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

或者,如果您希望进行现场编辑,只需:

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

答案 1 :(得分:1)

Heisenbug的改进版本

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

它避免调用像xargs这样的另一个程序。我做了一些测试似乎有点快。

答案 2 :(得分:0)

使用find并将输出重定向到awk:

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

答案 3 :(得分:0)

您可以使用一个awk命令

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

答案 4 :(得分:0)

一个有用的代码段,它显示awk处理文件列表就好像它是一个流一样(请注意如何使用行号)

find $HOME/.ssh -name "*.pub" -type f \
  -exec awk '{printf "%c) %12s %s...%s %s\n", 64 + NR, $1, substr($2,1,7), substr($2,length($2)-7), $3}' \
  {} +

示例输出

A)      ssh-dss AAAAB3N...WhdJHA== bob@your.uncle
B)  ssh-ed25519 AAAAC3N...9a5kCpbT bob@your.uncle
C)      ssh-rsa AAAAB3N...fzh3oUGZ bob@your.uncle