我对awk非常不熟悉,但是我正在寻找一种方法来遍历目录中的所有文件,并执行一个简单的awk命令,我的命令是一个简单的替换,用两个空格替换所有制表符。
awk
awk '{gsub("\t"," ");print}'
如何将其扩展为遍历一个目录并对所有文件执行命令?
kxxlusnw1#
当然,在命令行上将文件传递给 awk:
$ awk 'program' *
但可能它更容易使用
$ perl -pe 's/\t/ /g' *
或者,如果您希望进行就地编辑,只需:
$ perl -i.orig -pe 's/\t/ /g' *
qjp7pelc2#
海森堡理论的改进版
find . -type f -exec awk '{gsub("\t"," ");print}' {} \;
它避免调用另一个程序,比如xargs。用我做的一些测试看起来快了一点。
l2osamch3#
使用find并将输出重定向到awk:
find . -type f | xargs awk '{gsub("\t"," ");print}'
svujldwt4#
您可以使用一个awk命令来完成此操作
awk -F"\t" '{$1=$1;print $0 >FILENAME}' OFS=" " file
tf7tbtn25#
这是一个有用的片段,显示了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
5条答案
按热度按时间kxxlusnw1#
当然,在命令行上将文件传递给 awk:
但可能它更容易使用
或者,如果您希望进行就地编辑,只需:
qjp7pelc2#
海森堡理论的改进版
它避免调用另一个程序,比如xargs。用我做的一些测试看起来快了一点。
l2osamch3#
使用find并将输出重定向到awk:
svujldwt4#
您可以使用一个
awk
命令来完成此操作tf7tbtn25#
这是一个有用的片段,显示了awk处理文件列表,就好像它是一个流一样(注意行号是如何使用的)
示例输出