Невозможно разделить коды в одном файле на несколько файлов в AWK / Python - PullRequest
0 голосов
/ 11 марта 2009

Мне нужно поместить разные коды в один файл для нескольких файлов. Этот файл, по всей видимости, передается создателям AWK на их домашней странице. Файл также здесь для удобства использования.

Моя попытка решить проблему

Я могу получить строки, где каждый код находится на

awk '{ print $1 }'

Однако я не знаю, как

  1. чтобы получить точные номера строк, чтобы я мог их использовать
  2. для сбора кодов между конкретными строками, чтобы первое слово каждой строки игнорировалось
  3. поместить эти отдельные коды в новые файлы, которые названы первым словом в строке

Я уверен, что проблему можно решить с помощью AWK и с помощью Python. Возможно, нам нужно использовать их вместе.

[править] после первого ответа

Я получаю следующую ошибку при попытке выполнить ее с помощью awk

$awk awkcode.txt 
awk: syntax error at source line 1
 context is
     >>> awkcode <<< .txt
awk: bailing out at source line 1

Ответы [ 3 ]

3 голосов
/ 11 марта 2009

Вы пытались:

  1. Создайте файл unbundle.awk со следующим содержимым:

$ 1! = Prev {close (prev); prev = $ 1} {print substr ($ 0, индекс ($ 0, "") + 1)> $ 1}

  1. Удалите следующие строки из файла awkcode.txt:

    # unbundle - распаковать пакет в отдельные файлы

$ 1! = Prev {close (prev); prev = $ 1} {print substr ($ 0, индекс ($ 0, "") + 1)> $ 1}

  1. Запустите следующую команду:

awk -f unbundle.awk awkcode.txt

2 голосов
/ 11 марта 2009

Вы пытаетесь распаковать файл в этом формате? Это своего рода архив оболочки. Для получения дополнительной информации см. http://en.wikipedia.org/wiki/Shar

Если вы запустите эту программу с помощью awk, awk создаст все эти файлы. Вам не нужно много писать или переписывать. Вы можете просто запустить эту awk-программу, и она все равно должна работать.

Сначала просмотрите файл в «обычном» формате. http://dpaste.com/12282/plain/

Во-вторых, сохраните простую версию файла как 'awkcode.shar'

В-третьих, я думаю, вам нужно использовать следующую команду.

awk -f awkcode.shar

Если вы хотите заменить его на программу Python, это будет что-то вроде этого.

import urllib2, sys

data= urllib2.urlopen( "http://dpaste.com/12282/plain/" )
currName, currFile = None, sys.stdout
for line in data:
    fileName, _, text= line.strip().partition(' ')
    if fileName == currName:
        currFile.write(line+"\n")
    else:
        if currFile is not None:
            currFile.close()
        currName= fileName
        currFile= open( currName, "w" )
if currFile is not None:
    currFile.close()
0 голосов
/ 07 октября 2013

Awk-файл awkcode.txt не должен содержать ЛЮБОЙ пустой строки. Если встречается какая-либо пустая строка, программа awk завершается ошибкой. Нет проверки ошибок, чтобы отфильтровать пустую строку в коде. Это я мог узнать после нескольких дней борьбы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...