我喜欢Python,但并不关心AWK。为了进行比较(以及查看Python-to-AWK主机如何执行此操作),有人可以在AWK中重写以下Python程序吗?考虑到它有多短,有些人会认为重写对于有一点时间的人来说简单易行。
import os
ROOT = '/Users/Zero/Documents/MyProgram.app/Contents/TempFiles'
ID = '628251 173511 223401 138276 673278 698450 629138 449040 901575'.split()
def main():
for name in os.listdir(ROOT):
if '.log' in name.lower():
path = os.path.join(ROOT, name)
if os.path.isfile(path):
data = open(path, 'rb').read()
for line in data.split('\r'):
for number in ID:
if number in line:
print line
break
if __name__ == '__main__':
main()
答案 0 :(得分:6)
为什么选择awk?
这看起来像是一个简单的grep命令给我;类似的东西:
egrep -w '628251|173511|223401|138276|673278|698450|629138|449040|901575' /Users/Zero/Documents/MyProgram.app/Contents/TempFiles/*.log*
更新:或使用find + grep,如某些评论中所建议的,如果要进行递归搜索
答案 1 :(得分:4)
BEGIN{
id="628251 173511 223401 138276 673278 698450 629138 449040 901575"
m=split(id,ID," ")
for(i=1;i<ARGC;i++){
while( (getline line<ARGV[i] ) > 0 ){
n=split(line,LINE," ")
for ( o=1; o<=n; o++){
for(num in ID){
if ( num == LINE[o] ){
print line
}
}
}
}
}
}
另存为myscript.awk
,然后
#!/bin/bash
ROOT = "/Users/Zero/Documents/MyProgram.app/Contents/TempFiles"
cd $ROOT
awk -f myscript.awk file* #do for files that start with "file"
@OP,
对于文本/文件处理,awk不会丢失到Perl或Python或其他任何内容。如果您(或其他人认为awk已经过时)感兴趣,请转到http://awk.info。不,awk仍然在现代环境中有其用途。不要让别人告诉你