Разделение файлов по первому символу - PullRequest
2 голосов
/ 05 октября 2019

Мне нужно разделить большой текстовый файл по первому символу строк.

Например, у меня есть файл вроде:

B1fe3z5 
A1g5sef 
C1gs351qz 
C02qdqz

Тогда

A1g5sef is copied to a.txt  
B1fe3z5 is copied to b.txt 
C02qdqz and C1gs351qz are copied to c.txt

Я попробовал этот ответ: https://stackoverflow.com/a/24778211/9199179

awk '{print > substr($0, 0, 1)}' file

Работает хорошо, но у меня есть строки, начинающиеся с некоторых символов, таких как "\", которые запрещены в имени файла.

Как я могу перенаправить эти строки в определенный файл "symbol.txt"?

Спасибо!

1 Ответ

3 голосов
/ 05 октября 2019

РЕДАКТИРОВАТЬ2 Поговорили с OP в разделе комментариев и OP упомянули, что если любая строка начинается с каких-либо алфавитов или цифр, она должна идти к соответствующей букве, иначе она должна идти в другой файл,тогда следует попробовать следующее.

awk '{if($0 ~ /^[a-zA-Z0-9]/){file=substr($0, 1, 1)} else {file="symbol_file"};print >> (file);close(file)}' Input_file

ИЛИ В соответствии с комментарием Эда сэра сократить форму выше решения.

awk '{file = (/^[[:alnum:]]/ ? tolower(substr($0,1,1)) : "symbol") ".txt"; print >> file; close(file)}' Input_file


РЕДАКТИРОВАТЬ1:

awk '{if($0~/^\\/ || $0~/^\//){file="symbol_file"} else {file=substr($0, 1, 1)};print >> (file);close(file)}' Input_file


Не могли бы вы попробовать один раз.

awk '{if($0~/^\\/){file=substr($0, 2, 1)} else {file=substr($0, 1, 1)};print >> (file);close(file)}' Input_file

Добавлены исправления подхода OP и другие предложения:

1 - Вы не закрывали выходные файлы в бэк-энде, что, безусловно, будет проблематично, если у вас огромный Input_file ив результате появится сообщение «Ошибка слишком большого количества открытых файлов»;поэтому я исправил это.

2- Вы используете substr($0, 0, 1), что не должно быть так;в substr index starts from 1 not from 0`.

3- К вашему вопросу о строках, начинающихся с \ Я проверил условие для этого, если строка начинается с \, тогда взять 2-й символдля выходного файла или взять первый символ для имени выходного файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...