Рейтинг:6

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

флаг ua

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

голова -c 29 CC-MAIN-20210620114611-20210620144611-00436.warc

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

ВАРК/1.0
WARC-тип: warcinfo

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

голова -c 30 CC-MAIN-20210620114611-20210620144611-00436.warc

Вывод:

ВАРК/1.0

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

user7761803 avatar
флаг sa
Если вы хотите точно увидеть, что происходит, направьте вывод в шестнадцатеричный дамп с помощью чего-то вроде `head -c 30 CC-MAIN-20210620114611-20210620144611-00436.warc | шестнадцатеричный дамп -Cv`
Рейтинг:17
флаг hr

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

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

ваше имя@компьютер:~$ head -c29 файл.warc
ВАРК/1.0
WARC-Type: responseyourname@computer:~$

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

вашеимя@компьютер:~$head -c31file.warc
ВАРК/1.0
WARC-тип: ответ
вашеимя@компьютер:~$

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

вашеимя@компьютер:~$head -c31file.warc
ВАРК/1.0
вашеимя@компьютер:~$

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

флаг br
Или, более практично, просто используйте `head -c 30 имя_файла; эхо`

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.