The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

форумы  помощь  поиск  регистрация  вход/выход  слежка  RSS
"Скрипт для совмещения строк"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Скрипт для совмещения строк"  +/
Сообщение от Uche (ok) on 11-Фев-17, 01:07 
Доброго времени.
Имею некое отношение к составлению различных заданий для учащихся. В познавательных для себя целях решил использовать баш как основу для автоматизации некоторых процессов. Вот в чем суть, если абстрагировано. Имеется некий файл А в котором содержатся имена. Имеется некий файл Б, в котором имеются фамилии. Задача в том, чтобы создать из этих двух файлов файл В, где каждая из строк файла А совмещалась с каждой строкой файла Б, т.е. в файле В каждое имя было совмещено с каждой фамилией. Например
Файл А:
1
2
3

Файл Б:
а
б
в

Файл В (результат совмещения):









Сейчас на таком застрял на этом:
echo > C
STR1=`wc -l a`
NUM=0
S1=`cat A|head -$NUM`
S2=`cat B|head -$NUM`
until [ $NUM -lt $STR1 ]
do
let NUM=$NUM+1
echo "$S1$S2" >> C
done

И тут моих знаний пока не хватает, чтобы понять, как вместо построчного совмещения, получить строки каждая+каждая. Может кто подсказать?


Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Скрипт для совмещения строк"  +2 +/
Сообщение от михалыч (ok) on 11-Фев-17, 04:43 
а вам точно на баше нужно?
#!/bin/sh

while read name; do
    while read surname; do
        echo $name$surname;
    done < surname
done < name
exit


а то использование всяких там wc cat head могут приравнять к читерству )))
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Скрипт для совмещения строк"  +/
Сообщение от Square1 on 11-Фев-17, 14:09 

>[оверквотинг удален]
> STR1=`wc -l a`
> NUM=0
> S1=`cat A|head -$NUM`
> S2=`cat B|head -$NUM`
> until [ $NUM -lt $STR1 ]
> do
> let NUM=$NUM+1
> echo "$S1$S2" >> C
> done
>

Ваше решение..хм.. скажем так- не лишено остроумия и оригинальности... но выдает с потрохами что вы никогда прежде программированием ничего сложнее бэйсика начальных классов не занимались...

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Скрипт для совмещения строк"  +/
Сообщение от Led (ok) on 11-Фев-17, 17:55 
man join

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Скрипт для совмещения строк"  +/
Сообщение от . on 11-Фев-17, 22:52 
> man join

Led, а ты сам то ... :)  
Возникает классический вопрос джентльмена на рыбалке :) "НО КАК!? сэр ...Э :-)))
Объясняй.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Скрипт для совмещения строк"  +/
Сообщение от Led (ok) on 12-Фев-17, 02:09 
>> man join
> Led, а ты сам то ... :)
> Возникает классический вопрос джентльмена на рыбалке :) "НО КАК!? сэр ...Э :-)))
> Объясняй.

Да никак. Не вчитывался в условие:)

В данном случае, пожалуй, while/do + sed будет достаточно.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Скрипт для совмещения строк"  +/
Сообщение от DeadLoco (ok) on 13-Фев-17, 15:44 
> Возникает классический вопрос джентльмена на рыбалке :) "НО КАК!? сэр ...Э :-)))
> Объясняй.

join(1) имеет рестрикт по равенству первых полей, и не является декартовым произведением

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Скрипт для совмещения строк"  +/
Сообщение от Andrey Mitrofanov on 12-Фев-17, 06:19 
> Задача в том, чтобы создать из этих двух файлов файл В,
> где каждая из строк файла А совмещалась с каждой строкой файла
> Б, т.е. в файле В каждое имя было совмещено с каждой
> совмещения, получить строки каждая+каждая. Может кто подсказать?

$ parallel echo {1}{2} :::: file-123 file-abc

-- https://www.gnu.org/s/parallel/ Всего 300К на perl-е творят чудеса.

$ parallel echo {1}{2} ::: {1..3} ::: {a..c}
$ parallel echo {1}{2} ::: 1 2 3 ::: a b c

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема


  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor