Mac的Bash'cut'命令

时间:2019-05-01 18:43:10

标签: bash macos cut

我想用定界符“:”剪切所有内容。输入文件的格式如下:

data1:data2
data11:data22
...

我有一个Linux命令

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

在Mac终端上,它给出一个错误:

cut: stdin: Illegal byte sequence

在Mac终端上执行此操作的正确方法是什么?

2 个答案:

答案 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