Команда Bash 'cut' для Mac - PullRequest
1 голос
/ 01 мая 2019

Я хочу вырезать все с разделителем ":" Входной файл имеет следующий формат:

data1:data2
data11:data22
...

У меня есть команда linux

cat merged.txt | cut -f1 -d ":" > output.txt

На терминале Mac этовыдает ошибку:

cut: stdin: Illegal byte sequence

Как правильно сделать это на Mac-терминале?

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Ваш входной файл (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 (или любой другой ваш обычный язык).

0 голосов
/ 01 мая 2019

Ваша команда вырезать работает на моем Mac, вы можете попробовать awk для того же результата

awk -F: '{print $1}' merged.txt

data1
data11
...