Что это за числа слева от вывода od?

Вы можете получить позицию из Perl Text :: CSV_XS следующим образом:

perl -MText::CSV_XS -E 'open(my $fh, "<:encoding(utf8)", $ARGV[0]) or die "open: $!"; $csv = Text::CSV_XS->new({binary => 1, auto_diag => 9, diag_verbose => 1 } ); while (my $row = $csv->getline($fh)) { say tell $fh }' FILENAME.csv

Обратите внимание на FILENAME.csv в конце строки.

После успешного анализа каждой строки будет напечатано смещение байт .

Распаковка однострочного файла:

use Text::CSV_XS;
use feature 'say';
open(my $fh, '<:encoding(utf8)', $ARGV[0]) or die "open: $!";
$csv = 'Text::CSV_XS'->new({'binary' => 1, 'auto_diag' => 9, 'diag_verbose' => 1});
while (my $row = $csv->getline($fh)) {
    say tell $fh
}

Я отправил ему этот ошибочный CSS ( new.css ):

r1c1,"r1
c2",r1c3
r2c1,"r2c2,r2c3
r3c1,r3c2,r3c3

Вывод:

18
# CSV_XS ERROR: 2027 - EIQ - Quoted field not terminated @ rec 1 pos 15 field 2

(если перед поврежденной строкой было больше хороших строк, будет напечатано больше байтовых смещений. Используйте последнее.)

Итак, после байта 18 обнаружена ошибка. Достаточно легко получить номер строки из этого: head -c 18 new.csv | wc -l , где указано 2 (количество хороших строк). Таким образом, ошибка находится в строке 3 - и действительно, кавычка вокруг r2c2 не закрыта.

2
02.02.2017, 13:25
2 ответа

На самом деле это упоминается на странице info для od (можно получить, запустив info od или посетив https: //www.gnu .org / software / coreutils / manual / html_node / od-invocation.html # od-invocation , на который также есть ссылка в конце страницы руководства), хотя и не очень подробно:

Каждая строка вывода состоит из смещения на входе, за которым следуют группы данных из файла. По умолчанию od печатает смещение в восьмеричном формате, и каждая группа файловых данных представляет собой значение C short int, напечатанное как одно восьмеричное число.

Итак, в вашем выводе показаны восьмеричные числа 0000000, 0000020 и 0000030, которые являются десятичными 0, 16 и 24. Обратите внимание, что n слова , записанного , является 17-й символ (здесь байт) файла, поэтому его можно найти, начав чтение со смещения 16, а последняя строка новой строки - 24-й, поэтому следующая (пустая) строка вывода начинается со смещения 24.

6
27.01.2020, 21:52

Первый столбец в выходных данных od представляет байтовое смещение в файле.

1
27.01.2020, 21:52

Теги

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