我试图使用paste
命令(在Mac OS的bash中)将一些文件写入新的(制表符分隔)文件。问题如下:
paste file_1 file_2 file_3 > new_file
每个文件file_n包含存储在一列中的数字或字符。 E.g:
STND
KSMN
PQhr
yeIE
但是有些文件/列包含外来字符,例如:
ÚÐÆØ
Ý?íS
??ðý
Ó123
只要没有外来字符,上面提到的paste
命令就可以创建new_file,但是对于包含外来字符的文件/列不能这样做。
是否有人知道paste
是否/如何处理此问题,或者是否有替代解决方案?
答案 0 :(得分:1)
@Mark,如果在LC_CTYPE变量中进行了更改,那么粘贴命令确实有效。我的语言环境变量原来是:
$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
但LC_CTYPE =" UTF-8"导致脚本在粘贴时失败。但是,如果改为" C"该脚本运行得非常好:
$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
根据这一变化,
$ paste file_1 file_2 file_3> NEW_FILE
即使是外国人,也能很好地运作。
答案 1 :(得分:0)
我猜这与您的语言环境有关 - 您的计算机认为您的位置以及您希望它如何解释字符,金钱,数字和时间。
您可以输入以下命令检查您的语言区域:
locale
在你的终端 - 我的看起来像这样:
LANG="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_CTYPE="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_ALL=
我猜你需要先将LANG
或LC_CTYPE
设置为其中包含utf8
的内容,然后再运行paste
这样的内容:
LANG=en_US.UTF-8 paste file1 file2
或者
LANG=C paste file1 file2
抱歉,我无能为力。