Solved. Сортировка слов по правилу внутри строк файла

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
nerve
Сообщения: 267
ОС: OpenBSD

Solved. Сортировка слов по правилу внутри строк файла

Сообщение nerve » 14.07.2014 13:21

допустим файл выглядит так:

Код: Выделить всё

|1|2|text|file1.txt, file2.txt, file3.txt|
|2|2|text|file4.txt, file2.txt, file3_.txt|
|3|2|text|file5.txt, file8.txt, file9.txt|
|4|2|text|file6.txt, file7_.txt, file3_.txt|

файлы с нижним подчеркиванием надо поместить перед остальными и отделить их точкой с запятой от остальных

Код: Выделить всё

|1|2|text|file1.txt, file2.txt, file3.txt|
|2|2|text|file3_.txt; file4.txt, file2.txt|
|3|2|text|file5.txt, file8.txt, file9.txt|
|4|2|text|file7_.txt, file3_.txt; file6.txt|
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15814
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Solved. Сортировка слов по правилу внутри строк файла

Сообщение Bizdelnick » 14.07.2014 13:34

Что-то Вы ИМХО зачастили с подобными вопросами... За 10 WME сделаю.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
nerve
Сообщения: 267
ОС: OpenBSD

Re: Solved. Сортировка слов по правилу внутри строк файла

Сообщение nerve » 15.07.2014 12:03

Shell

$ cat text |1|2|text|file1.txt, file2.txt, file3.txt| |2|2|text|file4.txt, file2.txt, file3_.txt| |3|2|text|file5.txt, file8.txt, file9.txt| |4|2|text|file6.txt, file7_.txt, file3_.txt| $ ./p.sh $ cat newtext |1|2|text|file1.txt, file2.txt, file3.txt| |2|2|text|file3_.txt; file4.txt, file2.txt| |3|2|text|file5.txt, file8.txt, file9.txt| |4|2|text|file7_.txt, file3_.txt; file6.txt| $ cat p.sh #!/bin/bash L=`grep -n "_." text | awk -F: '{print $1}' | xargs` for F in $L do safepart=`sed -n "${F}s/file.*//p" text` sed -n "${F}p" text | awk -F"|" '{print $5}' | xargs -n1 > file1 top=`grep "_." file1` down=`grep -v "_." file1` echo "$safepart$top; $down|" > file2 newline=`tr '\n' ' ' < file2` sed -i "${F}c\\${newline}" text sed 's/,|/|/' text > newtext done

Спасибо сказали: