我对awk
非常不熟悉,但我正在寻找一种方法来遍历目录中的所有文件并执行简单的awk
命令。我的命令是一个简单的替换,用两个空格替换所有选项卡。
awk '{gsub("\t"," ");print}'
如何将其扩展为遍历目录并对所有文件执行命令?
答案 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