Голова со странным поведением

Я загрузил файл warc из Common Crawl в Ubuntu 18.04. После распаковки с помощью gzip я попытался получить сегмент файла, используя head . Сначала я попробовал:

head -c 29 CC-MAIN-20210620114611-20210620144611-00436.warc

Результат был ожидаемый, первые 29 байтов файла:

WARC/1.0
WARC-Type: warcinfo

Но если вместо 29 я использую 30, то получится результат, которого я не ожидал:

head -c 30 CC-MAIN-20210620114611-20210620144611-00436.warc

Вывод:

WARC/1.0

Это только первые 10 байтов файла, а не первые 30. Если я использую head -c 31 , результат снова будет ожидаемым. Я понятия не имею, является ли это ошибкой или есть подробности о том, как работает голова, о которых я не знаю.

6
задан 2 August 2021 в 04:45

1 ответ

Команда head почти наверняка выводит запрошенное количество байтов, однако то, каковы эти байты , влияет на то, как они отображаются в вашем терминале.

В частности, ваш архивный файл почти наверняка имеет окончания строки CRLF в стиле DOS, с CR в байте 30 и LF в байте 31. Когда вы выполняете head -c29 , вывод заголовка исключает оба конца строки байтов, и вы увидите что-то вроде

yourname@computer:~$ head -c29 file.warc
WARC/1.0
WARC-Type: responseyourname@computer:~$

с приглашением оболочки сразу после 29-го байта. Когда вы выполняете head -c31 , вы захватываете и CR, и LF, и вывод выглядит как

yourname@computer:~$ head -c31 file.warc
WARC/1.0
WARC-Type: response
yourname@computer:~$

Однако, когда вы выполняете head -c30 , вывод содержит завершающий CR но не его следующий LF - курсор отправляется обратно в позицию 0, но остается в той же строке терминала, где он затем перезаписывается приглашением вашей оболочки:

yourname@computer:~$ head -c31 file.warc
WARC/1.0
yourname@computer:~$

Если строка длиннее, чем ваше приглашение, вы будете видеть символы из файла, выглядывающие из-за конца. Если бы ваше приглашение PS1 было пустым, вы бы увидели ожидаемый результат полностью.

17
ответ дан 20 August 2021 в 10:30

Другие вопросы по тегам:

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