Может ли скучающий мастер AWK любезно конвертировать эту программу на Python? - PullRequest
2 голосов
/ 20 октября 2010

Мне нравится Python, но я не очень люблю AWK. В целях сравнения (и чтобы увидеть, как мастер Python-to-AWK сделает это), кто-то может переписать следующую программу Python в AWK? Учитывая, насколько он короткий, некоторые могут подумать, что переписывание будет простым и легким для любого, у кого мало времени.

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()

Ответы [ 2 ]

6 голосов
/ 20 октября 2010

Почему awk?

Для меня это выглядит как простая команда grep; что-то вроде:

egrep -w '628251|173511|223401|138276|673278|698450|629138|449040|901575' /Users/Zero/Documents/MyProgram.app/Contents/TempFiles/*.log*

update: или используйте find + grep, как предлагается в некоторых комментариях, если предназначен рекурсивный поиск

4 голосов
/ 20 октября 2010
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 все еще находит применение в современной среде.не позволяйте никому говорить вам иначе

...