LINUX.ORG.RU

Скрипт на bash-е в одну строчку

 ,


0

2

Имеем некоторый файл следующего содержания:

FIRST:SECOND:THIRD
FIRST:SECOND:THIRD
FIRST:SECOND:THIRD
Необходимо записать значения FIRST и SECOND в файл THIRD. Как это сделать на bash-e... без циклов и лишних переменных?

Ответ на: комментарий от andrew667

То есть с помощью них вырезать подстроку? Ну получем мы значения FIRST и SECOND:

cat file | perl -pe 's/(\w+):(\w+):(\w+)/\1:\1/'
А дальше что?

kalterfive ★★
() автор топика
Последнее исправление: kalterfive (всего исправлений: 2)
Ответ на: комментарий от dada

third.file

Не, это значение тоже нужно взять из файла.

kalterfive ★★
() автор топика
Ответ на: комментарий от joy4eg

Плюсую. Тут либо без циклов, либо на чистом bash-е...

intelfx ★★★★★
()
awk -F':' '{print $1,$2 > $3}' file.txt
anonymous
()
sed 's@FIRST:SECOND:THIRD@FIRST1:SECOND1:THIRD@' file
CHIPOK ★★★
()
Последнее исправление: CHIPOK (всего исправлений: 1)
Ответ на: комментарий от kalterfive

То есть с помощью них вырезать подстроку?

можно с помощью них, можно и без них, например,

cut -f 1,2 -d : myfile > out

andrew667 ★★★★★
()
Ответ на: комментарий от redpunk

bash -c «$(cat file | awk -F: '{print „echo \“»$1" «$2»\«>»$3";«}')»

OMG

awk -F: '{print "echo \""$1" "$2"\">>"$3";"}' | $SHELL

если не нравится чистый awk, см выше

anonymous
()
Ответ на: комментарий от anonymous

awk файл подставить перед | $SHELL (копипаста расслабляет)

anonymous
()
Ответ на: комментарий от dada

Вы и подобные вам, которые пишут

cat file |
для того чтобы передать содержимое файла в программу, которая сама умеет читать из файла, скажите, зачем вы это делаете?

anonymous
()
Ответ на: комментарий от sadlinuxoid

Сколько можно тупить?

У ТС'а файл вида

a11:b11:c1
a12:b12:c1
a21:b21:c2
a13:b13:c1
a22:b22:c2

в результате (этого примера) должны появиться два файла c1 и с2

в с1 3 строки, а в с2 две строки.

anonymous
()
Ответ на: комментарий от anonymous

для того чтобы передать содержимое файла в программу, которая сама умеет читать из файла, скажите, зачем вы это делаете?

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

anonymous
()
Ответ на: комментарий от anonymous

Чтобы абстрагироваться от файла

ху ты. пиши тогда cat | prog, шелл сам подставит нужное имя файла, а то абстракция твоя не особо абстрагированная получается.

и показать

кому?

sadlinuxoid
()
Ответ на: комментарий от sadlinuxoid

cat file | perl -pe 's/(\w+):(\w+):(\w+)/\1:\1/'

Перепиши без "cat" и без "perl ... < file"

Тебе надо будет вызвать open и в цикле while читать построчно

anonymous
()
Ответ на: комментарий от anonymous

Еще один оратор высказал мнение, что это избавляет от необходимости указания параметров.

sadlinuxoid
()
Ответ на: комментарий от sadlinuxoid

И что не так?

В каком-то частном случае, благодаря эмуляции перлом поведения sed/awk (открытие файлов для обработки), при наличие опций -n -p -F, не понадобилось открывать файл в ручную. При perl -e '.....' file --- этот файл бы не открылся, а так и остался аргументом командной строки.

anonymous
()

PHP

php -r "
    \$in=\$argv[1];
    \$s=file_get_contents(\$in);
    \$a=explode(\"\n\", \$s);
    foreach(\$a as \$l){
        \$l=trim(\$l); if (\$l==='') continue;
        \$a2=explode(':', \$l);
        \$o=\"{\$a2[0]}:{\$a2[1]}\n\";
        file_put_contents(\$a2[2], \$o, FILE_APPEND);
    };
" -- "in.txt"
[/bash]
anonymous
()
Ответ на: PHP от anonymous

awk -F':' '{print $1,$2 > $3}' file.txt

в сравнении с этим, то что ты написал мягко говоря избыточно.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.