Ваш входной файл (merged.txt), вероятно, содержит последовательности байтов / байтов, которые недопустимы в вашей текущей локали.Например, в вашей локали может быть указана кодировка символов UTF-8, но файл может быть в какой-то другой кодировке и не может быть проанализирован как действительный UTF-8.Если это проблема, вы можете обойти ее, сказав tr
, что нужно принять локаль "C", которая в основном говорит ему обрабатывать ввод как поток байтов, не обращая внимания на кодировку.
BTW, cat file |
- это то, что обычно называют бесполезным использованием Cat (UUOC) - вместо этого вы можете просто использовать стандартное перенаправление ввода < file
, что чище и эффективнее.Таким образом, моя версия вашей команды будет выглядеть следующим образом:
LC_ALL=C cut -f1 -d ":" < merged.txt > output.txt
Обратите внимание, что, поскольку присвоение LC_ALL=C
является префиксом команды tr
, оно применяется только к этой одной команде и не запутаетсядругие операции, которые должен предполагать UTF-8 (или любой другой ваш обычный язык).