Невозможно разделить коды в одном файле на несколько файлов в AWK / Python

StackOverflow https://stackoverflow.com/questions/632958

  •  08-07-2019
  •  | 
  •  

Вопрос

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

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

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

awk '{ print $1 }'

Тем не менее, я не знаю, как

<Ол>
  • чтобы получить точные номера строк, чтобы я мог их использовать
  • для сбора кодов между конкретными строками, чтобы первое слово каждой строки игнорировалось
  • поместить эти отдельные коды в новые файлы, имена которых начинаются с первого слова в строке
  • Я уверен, что проблему можно решить с помощью AWK и Python. Возможно, нам нужно использовать их вместе.

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

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

    $awk awkcode.txt 
    awk: syntax error at source line 1
     context is
         >>> awkcode <<< .txt
    awk: bailing out at source line 1
    
    Это было полезно?

    Решение

    Вы пытались:

    <Ол>
  • Создайте файл unbundle.awk со следующим содержанием:
  • $ 1! = prev {close (prev); prev = $ 1}            {print substr ($ 0, индекс ($ 0, ") + 1) > $ 1}

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

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

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

      1. Выполните следующую команду:
      2. awk -f unbundle.awk awkcode.txt

    Другие советы

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

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

    Сначала просмотрите файл в " plain " формат. 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()
    

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top