我想用定界符“:”剪切所有内容。输入文件的格式如下:
data1:data2
data11:data22
...
我有一个Linux命令
cat merged.txt | cut -f1 -d ":" > output.txt
在Mac终端上,它给出一个错误:
cut: stdin: Illegal byte sequence
在Mac终端上执行此操作的正确方法是什么?
答案 0 :(得分:1)
您的输入文件(merged.txt)可能包含在当前语言环境中无效的字节/字节序列。例如,您的语言环境可能指定了UTF-8字符编码,但文件采用其他某种编码,因此无法将其解析为有效的UTF-8。如果这是问题所在,则可以通过告诉tr
采取“ C”语言环境来解决此问题,该语言环境基本上告诉它将输入作为字节流处理,而无需注意编码。
顺便说一句,cat file |
是通常所说的猫的无用使用(UUOC)-您可以只使用标准的输入重定向< file
,它更干净,更有效。因此,我的命令版本为:
LC_ALL=C cut -f1 -d ":" < merged.txt > output.txt
请注意,由于LC_ALL=C
分配是tr
命令的前缀,因此它仅适用于该命令,不会弄乱应该进行的其他操作UTF-8(或任何常规语言环境)。
答案 1 :(得分:0)
您的cut命令在我的Mac上适用于我,您可以尝试awk获得相同的结果
awk -F: '{print $1}' merged.txt
data1
data11