将外来字符粘贴到新文件

时间:2015-10-05 10:02:10

标签: bash paste

我试图使用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是否/如何处理此问题,或者是否有替代解决方案?

2 个答案:

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

我猜你需要先将LANGLC_CTYPE设置为其中包含utf8的内容,然后再运行paste这样的内容:

LANG=en_US.UTF-8 paste file1 file2

或者

LANG=C paste file1 file2

抱歉,我无能为力。