Unix - разделение на N файлов с помощью регулярного выражения для именования файла назначения - PullRequest
2 голосов
/ 01 марта 2012

Как разделить файл на N файлов, используя в качестве имени файла первые 2 символа в строке.

Исходный файл:

AA23409234TEXT
BA23201202Other Text
AA23509234YADA
BA23202202More Text.
C1000000000000000000

Должно создать 3 файла:

AA.txt

AA23409234TEXT
AA23509234YADA

BA.txt

BA23201202Other Text
BA23202202More Text.

C1.txt

C1000000000000000000

Я думаю об использовании подобного сценария sedна это

/^(..)/w \1

Но что на самом деле делает, это создает файл с именем '\ 1' вместо группы захвата.

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 01 марта 2012
$ awk '{fname=substr($0, 0, 2); print >>fname}' input.txt

Или

$ while read line; do echo "$line" >>"${line:0:2}"; done <input.txt
0 голосов
/ 01 марта 2012

Это может работать для вас:

sed 's/\(..\).*/echo "&" >>\1.txt/' file | sh

или если у вас есть GNU sed:

sed 's/\(..\).*/echo "&" >>\1.txt/e' file
0 голосов
/ 01 марта 2012

Первое, что вам нужно сделать, это определить все имена ваших файлов:

filenames=$(sed 's/\(..\).*/\1/' listOfStrings.txt | sort | uniq)

Затем выполнить цикл по этим именам файлов

for filename in $filenames
do
   sed -n '/^$filename/ p' listOfStrings.txt > $filename.txt
done

Я не проверял это, но ядумаю, что это должно работать.

...