我想使用分隔符“:”来切割所有内容。输入文件的格式如下:
data1:data2
data11:data22
...
我有一个Linux命令。
cat merged.txt | cut -f1 -d ":" > output.txt
在Mac终端中,会出现错误:
cut: stdin: Illegal byte sequence
什么是在Mac终端上执行正确方式?
您的输入文件(merged.txt)可能包含当前语言环境中无效的字节/字节序列。例如,您的语言环境可能指定UTF-8字符编码,但该文件可能是用其他编码方式创建的,并且无法解析为有效的UTF-8。如果这是问题所在,您可以通过告诉 tr
假定 "C" 语言环境来解决它,这基本上告诉它以字节流的形式处理输入而不注意编码。
顺便提一句,cat file |
被普遍称为使用了无用的 cat 命令 (UUOC) -- 您可以使用标准输入重定向 < file
来代替,这更加简洁和高效。因此,我版本的您的命令将会是:
LC_ALL=C cut -f1 -d ":" < merged.txt > output.txt
LC_ALL=C
赋值是tr
命令的前缀,因此它只适用于该命令,不会破坏其他操作,这些操作应该假定为UTF-8(或任何您正常的语言环境)。你的 cut 命令在我的 Mac 上有效,你可以尝试使用 awk 来获得相同的结果
awk -F: '{print $1}' merged.txt
data1
data11
file merged.txt
的输出是什么? - Benjamin W.cut
本身的问题。 - chepnermerged.txt
应用file
命令的输出是什么。它会告诉你系统认为该文件是什么类型(ASCII 或非 ASCII,回车等)。 - Benjamin W.