что getline делает внутри awk?

Кодировки символов ISO 8858 немного устарели для систем Linux. Ваша целая система Linux, вероятно, использует UTF-8 полностью. Включая Ваш эмулятор терминала и Вашу оболочку.

Как бы то ни было. cat, grep и less не делайте никакого преобразования кодирования, они будут рассматривать Ваш ISO-8859/latin1 файл как UTF-8, который не будет работать.

Если emacs может отобразить их, это - потому что это пытается автоматически обнаружить используемое кодирование и по-видимому успешно выполниться. Скажите emacs сохранить файл как UTF-8, и Вы сможете использовать cat/grep/ безотносительно на нем.

Если Вы знаете точную кодировку символов (ISO 8859 является набором их, необходимо знать точный: ISO-8859-1 или ISO-8859-15 или хуже), можно также преобразовать файлы из командной строки:

iconv --from-code ISO-8859-15 your_file -o your_file_as_utf8
5
03.05.2014, 15:42
2 ответа
[114999]Функция [115472]getline[115473] считывает следующую строку и перемещает скрипт к ней. Таким образом, последовательные вызовы [115474]getline[115475] переходят на следующую строку. Возможно, это проще понять на примере:
  • Как видно выше, скрипт будет обрабатывать первую строку, потому что она совпадает с [115476]foo[115477]. Каждый вызов на [115478]getline[115479] будет считывать строку после текущей, поэтому последующие вызовы [115480] распечатывают [115481] следующие строки.[115002].
  • 13
    27.01.2020, 20:32
    [114390] Если вы не знаете, что делает функция [114785]awk[114786], то обычная стратегия заключается в том, чтобы посмотреть на man-страницу:[12158]getline[12159]Set $0 со следующей входной записи; set NF, NR, FNR, RT[12160]Командный блок действительно выполняется только дважды. Остальные строки обрабатываются через [114791]getline[114792] из блока.[12161]Это может быть переписано на:[12162]
    2
    27.01.2020, 20:32

    Теги

    Похожие вопросы