Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2018-03-07 21:54:44

  moro - Użytkownik

moro
Użytkownik
Zarejestrowany: 2016-04-27

Bash hurtowa podmiana fraz w pliku

Witam
Jestem w trakcie pisania skryptu który będzie generować raport.
sytuacja wygląda tak że gotowy raport musi być w Excelu i skladać się z kolumn:
LP. czyli kolejna liczba całkowita
Numer wartoaci
Nazwa wartosci
Ilosc sztuk

Obecnie posiadam plik raportu pobrany z programu i zmodyfikowalem go do formatu
Nazwa wartości ; ilość sztuk (te dane pobieram z programu)

Mam plik wzorcowy w którym są wypisane kolumny:
LP., numer wartości, nazwa wartości oraz ilość domyślnie ustawiona na 0.

Może ktoś podpowiedzieć jak się za to zabrać żeby połączyć ze sobą te 2pliki?
Potrzebuję do pliku wzorcowego przypisać wartości z mojego raportu.
Częścią wspólną swoich plików jest nazwa wartości. Myślałem o pętli while + użyciu tablicy  żeby dane z raportu potraktować jak kolejne elementy tablicy ale nie bardzo wiem jak zacząć pisanie czegoś takiego.
Ważne jest to, że w wygenerowany raporcie mam tylko wartości niezerowe, a w raporcie muszą być wszystkie pozycje tzn te niezerowe oraz pozostałe z wartością 0 (z pliku wzorcowego)


Może doprecyzuje jak wyglądają teraz pliki:
wzorzec.csv

Lp ; Numer wartości ; Nazwa wartości ; Ilość sztuk
1  ;  100-001           ; wartość1          ; 0
2  ;  100-002           ; wartość2          ; 0
3  ;  201-001           ; wartość3          ; 0

raport.csv
wartość1 ; 5
wartość3 ; 2

Jako wynik ostateczny powinienem otrzymać:
Lp ; Numer wartości ; Nazwa wartości ; Ilość sztuk
1  ;  100-001           ; wartość1          ; 5
2  ;  100-002           ; wartość2          ; 0
3  ;  201-001           ; wartość3          ; 2

Ostatnio edytowany przez moro (2018-03-08 07:07:30)

Offline

 

#2  2018-03-08 11:42:36

  czadman - Bicycle repairman

czadman
Bicycle repairman
Skąd: Wrocław
Zarejestrowany: 2005-07-08

Re: Bash hurtowa podmiana fraz w pliku

Możesz użyć sed'a. Ale szczerze mówiąc to lepiej zastosować inny język, np. python, który ma w standardowym wyposażeniu biblioteki do czytania i pisania CSV i ogólnie jest bardziej sensownym wyborem do takich zadań. Takie tablicę możesz wczytać do słowników i w prosty sposób zaktualizować wartości, a potem wygenerować plik wynikowy.


http://www.debian.org/logos/openlogo-nd-50.png

Offline

 

#3  2018-03-08 12:10:57

  moro - Użytkownik

moro
Użytkownik
Zarejestrowany: 2016-04-27

Re: Bash hurtowa podmiana fraz w pliku

a jakby zastosować do tego pętle While

#!/bin/bash
while IFS=; read -r col1 col2
do
    reszta=$(grep -w $col3 $col4 wzorzec.csv)
    echo "I got:$col1|$col2|$col3|$col4 $reszta"
done < raport.csv


tylko nie chce mi to zadziałać....

Offline

 

#4  2018-03-08 13:22:04

  arecki - Użytkownik

arecki
Użytkownik
Skąd: 44 Bronson Lane Hensonville
Zarejestrowany: 2016-03-03

Re: Bash hurtowa podmiana fraz w pliku

grep obsłuży dwa wzorce ale musisz go o tym poinformować odpowiednią opcją.
Zajrzyj do manuala.

Offline

 

#5  2018-03-08 14:50:12

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Bash hurtowa podmiana fraz w pliku

Narzędzia wybiera się zależnie od celu. Jeślu chcesz wbić gwoździa to używasz młotka. Jeśli chcesz wkręcić wkręta - używasz śrubokręta albo wkrętarki.
Owszem - wkrętarką też gwoździa wbijesz... Ale czy na pewno to do tego służy?
Ty chcesz wkręcić wkręt młotkiem. Pewnie się da... Ale ja bym użył śrubokrętu.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#6  2018-03-08 20:51:23

  lis6502 - Łowca lamerów

lis6502
Łowca lamerów
Skąd: Stalinogród
Zarejestrowany: 2008-12-04

Re: Bash hurtowa podmiana fraz w pliku

awkiem bardzo ładnie parsuje się csv, łącznie z tymi eksportowanymi z excela gdzie trafi sie przypadek że między cudzysłowami trafi znak nowej linii, przecinek czy inne cudo :)
Jakbyś napisał coś więcej o tych plikach to pewnie szłoby coś napisać na kolanie :)
bo szczerze mówiąc nie rozumiem po co potrzebujesz dwa pliki wejściowe, jeden z danymi a drugi z licznikiem.

Offline

 

#7  2018-03-09 14:28:09

  seler - Użytkownik

seler
Użytkownik
Zarejestrowany: 2012-05-15

Re: Bash hurtowa podmiana fraz w pliku

zakładając pliki csv bez nagłówków i bez niepotrzebnych spacji:

Kod:

cut -d ';' -f -3 wzorzec.csv | while read line; do
    wartosc="$(echo "$line" | cut -d ';' -f 3)"
    ilosc="$(grep -m 1 "^${wartosc};" raport.csv | cut -d ';' -f 2)"
    [ -z "$ilosc" ] && ilosc=0
    echo "${line};${ilosc}"
done

Ostatnio edytowany przez seler (2018-03-09 14:28:53)


a to feler westchnął seler

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)