powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Сложить несколько файлов в один на shell
6 сообщений из 6, страница 1 из 1
Сложить несколько файлов в один на shell
    #38876442
Wolf79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, помогите со скриптом. Нужно из нескольких файлов сложить один.
Минимальный опыт простых линукс команд есть, но тут не могу понять как реализовать.

Задача такая:
Есть два файла где структура строк с разделителем |

Один файл с перечнем товаров tovar.txt (1млн и более записей)
01451145|45|451.90
01457156|887|478.40
где 45 и 887 - это коды типов товара стоят между первой и второй |

Второй файл с перечнем наименования товаров name.txt (около 5 тыс записей)
45|Телевизор
887|Микроволновка
где к коду привязано наименование

Нужен пример которым можно добавить в конец каждой строки первого файла наименование товара согласно его кода из второго.
Пример требуемого результата на выходе exit.txt
01451145|45|451.90|Телевизор
01457156|887|478.40|Микроволновка

Подскажите как это написать простой командой.
Хотя бы рабочий пример с пояснением, дальше уже докручу его.

З.Ы. Ранее это клелил через excell и сохранял в файл, но теперь записей 1млн и более, что совсем затруднительно стало исходя из доступного количества строк в excell, размеров файлов и нагрузки на комп вплоть до зависания на долгие минуты.
...
Рейтинг: 0 / 0
Сложить несколько файлов в один на shell
    #38876461
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, обычно это делают JOIN-м в любой РСУБД. Что мешает сделать так же?
...
Рейтинг: 0 / 0
Сложить несколько файлов в один на shell
    #38876474
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wolf79,

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#!/bin/sh

# параметры:
#  1 - файл с продуктами 
#  2 - файл с именами

gawk '
BEGIN { 
  IFS="|"; OFS=IFS; 
  while (getline<"'"$2"'") names[$1] = $2;
}
{ 
  $4 = names[$2]; 
  print; 
}
' "$1" > tovar_name.txt
...
Рейтинг: 0 / 0
Сложить несколько файлов в один на shell
    #38876481
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wolf79,
сорри, - опечатка.
надо
Код: powershell
1.
2.
BEGIN { 
  FS="|"; OFS=FS;
...
Рейтинг: 0 / 0
Сложить несколько файлов в один на shell
    #38880276
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wolf79,

В файл tovar.txt вставляешь первыми 5-ю строчками ( включая __DATA__)
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
#! /usr/bin/env perl
open NAMES,"names.txt" or die $!;
while( <NAMES>) { chomp; ($id,$name)=split'[|]'; $names{$id} = $name }
while( <DATA> ) { chomp; (undef,$id)=split'[|]'; print $_, '|', $names{$id}, "\n" }
__DATA__
01451145|45|451.90
01457156|887|478.40
014511767649|496|451.90
0145715697|8871|478.40




делаешь
Код: powershell
1.
chmod +x tovar.txt 



и затем, если надо вывести содержимое, так, как хотел, то просто
Код: powershell
1.
 ./tovar.txt



perl могуч, меняя одну строчку шапки, вывод текста можно сделать любым;
то есть, получился самоформатирующийся текст
...
Рейтинг: 0 / 0
Сложить несколько файлов в один на shell
    #38880336
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот так даже поканоничней:
Код: perl
1.
2.
3.
4.
5.
6.
7.
8.
#! /usr/bin/env perl
open (  NAMES,  "names.txt" ) or die 'Ошибка при попытке открыть файл names.txt: ', $!;
while( <NAMES>) { chomp; @a = split '[|]'; $names{$a[0]} = $a[1];                     }
while( <DATA> ) { chomp; @a = split '[|]'; print "$a[0]|$a[1]|$a[2]|$names{$a[1]}\n"; }                  

__DATA__
01451145|45|451.90
01457156|887|478.40
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Сложить несколько файлов в один на shell
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]