Bash 'cut' 命令的 Mac 版本

3

我想使用分隔符“:”来切割所有内容。输入文件的格式如下:

data1:data2
data11:data22
...

我有一个Linux命令。
cat merged.txt | cut -f1 -d ":" > output.txt

在Mac终端中,会出现错误:
cut: stdin: Illegal byte sequence

什么是在Mac终端上执行正确方式?

2
file merged.txt 的输出是什么? - Benjamin W.
1
这似乎是您的输入文件的问题,而不是 cut 本身的问题。 - chepner
请查看以下链接以解决Mac OS X上出现的“illegal byte sequence”错误:https://dev59.com/C2Ik5IYBdhLWcg3we-H5 - P....
2
不,我的意思是针对 merged.txt 应用 file 命令的输出是什么。它会告诉你系统认为该文件是什么类型(ASCII 或非 ASCII,回车等)。 - Benjamin W.
抱歉,我不太明白这个问题。merged.txt文件中的字符串是用冒号分隔的。我需要剪切冒号之前的所有内容和冒号本身,并将其余部分输出到一个新文件中。 - Darth Vader
显示剩余2条评论
2个回答

3

您的输入文件(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(或任何您正常的语言环境)。

0

你的 cut 命令在我的 Mac 上有效,你可以尝试使用 awk 来获得相同的结果

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

data1
data11

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接