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

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

Модераторы: /dev/random, Модераторы разделов

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

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

Сообщение nerve »

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

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

|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
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

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

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

Сообщение nerve »

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

Спасибо сказали:
Ответить