мы получаем zip-файл из исходной системы.Это файл .zip.мы распаковываем его в Linux с помощью команды unzip.файл .zip содержит файл .dat, который содержит строки одинаковой ширины.Чтобы быть точным, это файл с фиксированной шириной.Но при распаковке в файл .dat добавляются дополнительные символы, что приводит к разнице в длине разных строк.
unzip edw_ord_extr_3x_SIQP_20181021.182305.zip
, что приводит к edw_ord_extr_3x_SIQP_20181021.182305.dat
grep -P -n -a "[\x00-\x1F]" edw_ord_extr_3x_SIQP_20181021.182305.dat | wc -l
467
Этопоказывает, что есть специальные символы в 467 строках в соответствии с дизайном.Я открыл файл bad.dat в vi и нашел специальные символы.Пример:
@^@^R^@
^A^@
<90>^@^@^@
grep -P -n -a "[\x00-\x1F]" edw_ord_extr_3x_SIQP_20181021.182305.dat > bad.dat
awk '{ print length($0) }' bad.dat | sort | uniq
2090
2091
2092
2219
2220
2221
2222
2223
2224
2225
2219 - правильная длина.Это подразумевает, что наличие специальных символов может увеличить количество символов или уменьшить количество символов или не изменить количество символов.
мы обошли обходные пути, заменив все специальные символы на?
perl -pe 's/[\000-\011]|[\013-\037]|[\177-\377]/?/g' edw_ord_extr_3x_SIQP_20181021.182305.dat > clean.dat
на данный момент проблема решена.
Но мне нужно понять, почему специальные символы вставляются при выполнении команды unzip ?.Почему спецсимволы изменяют длину строки?Насколько я понимаю, специальный символ считается 1 символом, но в данном случае это не так.
Сведения о файле.
file -bi edw_ord_extr_3x_SIQP_20181021.182305.dat
application/octet-stream; charset=binary
Я открыл файл bad.dat в notepad ++ и могучтобы увидеть специальные символы, такие как SOH, BEL, NUL
Sample Hex Dump
000dff20 20 54 31 20 20 30 31 20 20 20 20 20 20 20 20 20 | T1 01 |
000e07d0 20 20 54 31 20 20 30 31 20 20 20 20 20 20 20 20 | T1 01 |
000e0e10 30 2e 30 30 30 30 30 30 58 5a 01 3f 00 00 00 00 |0.000000XZ.?....|
000e3340 20 30 39 30 30 20 20 54 31 20 20 30 31 20 20 20 | 0900 T1 01 |
000e4d60 31 20 20 30 31 20 20 20 20 20 20 20 20 20 20 20 |1 01 |
000e78d0 30 30 20 20 54 31 20 20 30 31 20 20 20 20 20 20 |00 T1 01 |
000e7f20 00 00 01 00 52 4f 3f 20 20 20 20 46 41 4c 4c 42 |....RO? FALLB|
000e8180 37 30 30 20 20 54 31 20 20 30 31 20 20 20 20 20 |700 T1 01 |
000e87d0 00 00 00 01 00 52 4f 3f 20 20 20 20 46 41 4c 4c |.....RO? FALL|