Решение Awk/Sed для английского/китайского текста?

У меня есть текстовый файл. Там сотни строк. Каждая строка написана либо английскими, либо китайскими иероглифами, но не обоими (есть несколько исключений, но, возможно, менее ‹10, так что их можно обнаружить и ими можно управлять). Одна строка может содержать несколько предложений. В итоге я хотел бы получить два файла; один на английском языке; другой на китайском.

Линии имеют тенденцию чередовать языки, но не всегда. Иногда могут быть две строки на английском языке, за которыми следует одна строка на китайском языке.

Есть ли способ использовать Sed или Awk для разделения языков на два разных текстовых файла?


person user26732    schedule 19.08.2015    source источник
comment
Если строка содержит только ASCII (через диапазон символов), считать ее английской?   -  person user2864740    schedule 19.08.2015


Ответы (1)


Этот однострочник может помочь:

awk '/[^\x00-\x7f]/{print >"cn.txt";next}{print > "en.txt"}' file

Он создаст два файла cn.txt and en.txt. Он проверяет, содержит ли строка хотя бы один символ, отличный от ascii, и если он будет найден, строка будет считаться китайской строкой.

Маленький тест:

kent$  cat f
this is line1 in english 
你好
this is line2 in english 
你好你好
this is line3 in english 
this is line4 in english 
你好你好你好

kent$  awk '/[^\x00-\x7f]/{print >"cn.txt";next}{print > "en.txt"}' f

kent$  head *.txt
==> cn.txt <==
你好
你好你好
你好你好你好

==> en.txt <==
this is line1 in english 
this is line2 in english 
this is line3 in english 
this is line4 in english
person Kent    schedule 19.08.2015