2015-10-05 2 views
0

Я пытался использовать команду paste (в bash для MacOS), чтобы записать несколько файлов в новый (разделенный вкладками) файл. Проблема выглядит так:Вставьте инородные символы в новый файл

paste file_1 file_2 file_3 > new_file 

Каждый из файлов file_n содержит числа или символы, хранящиеся в одном столбце. Например:

STND 
KSMN 
PQhr 
yeIE 

Но некоторые из файлов/столбцы содержат иностранные символы, например:

ÚÐÆØ 
Ý?íS 
??ðý 
Ó123 

Вышеупомянутый paste команда может создать new_file до тех пор, пока нет посторонних символов, но не удалось сделать это для файлов/столбцов, содержащих иностранные символы.

Кто-нибудь знает, может ли/как paste справиться с этим, или если есть альтернативное решение проблемы?

+0

Что выводит эта команда? 'env | grep -Ei "lang | locale" ' –

+0

Могу ли я спросить вас, как использовать эту команду для этой проблемы? Извините, я не очень опытный человек. – Eocene

+0

Вы просто скопируете его, выбрав его мышью и нажав 'cmd + c', а затем запустите терминал и вставьте его в терминал, нажав' cmd + v' и нажмите 'Enter/Return'. Запустите терминал, нажав 'cmd + пробел' и набрав« Term »и нажав« Enter/Return ». –

ответ

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 

К сожалению, я не могу быть более полезным.

+0

Я очень ценю время, которое вы потратили на то, чтобы помочь мне! Я работаю с OS X Yosemite, и вы можете работать с надлежащим Linux (?). Команда 'locate', вероятно, отличается от этих систем. Это то, что я получаю: '$ locate use: locate [-0Scims] [-l limit] [-d database] pattern ... база данных по умолчанию:' /var/db/locate.database 'или $ LOCATE_PATH' Мои иностранные символы в кодексе 850, формат dos. Не знаете, облегчает ли это решение? – Eocene

+0

Это 'locaLe', а не' locaTe' ;-) –

+0

Все было по-другому! Извините за мою глупость :) Я постараюсь перейти отсюда и посмотреть, смогу ли я ее решить; Большое спасибо за Вашу помощь! – Eocene

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= 

После этого изменения,

$ наклеить file_1 file_2 file_3> new_file

прекрасно работает хорошо, даже с иностранными символами.

+0

Отлично! Спасибо, что поделились. –

Смежные вопросы