[+] Skrypt w bashu na wypisanie danych z pliku

Potrzebujesz pomocy z C, C++, perl, python, itp.
szkodnik25
Posty: 2
Rejestracja: 09 grudnia 2012, 20:28

[+] Skrypt w bashu na wypisanie danych z pliku

Post autor: szkodnik25 »

Mamy dany plik "nazwa" o strukturzedanych:
imie:nazwisko:PESEL
Skrypt powinien wypisać dane wszystkich osób o imieniu Jan w postaci:
imie nazwisko - PESEL: ----------

Wyglada on tak:

[code]
#!/bin/bash

[/code]

Kod: Zaznacz cały

while read LINE
do


x=`echo ${LINE} | cut -d ':' -f1`
y=`echo ${LINE} | cut -d ':' -f2`
z=`echo ${LINE} | cut -d ':' -f3`


echo $x $y "PESEL:" $z
done < nazwa
Jednak nie wypisuje mi ostatniej linii.
Awatar użytkownika
LordRuthwen
Moderator
Posty: 2341
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Post autor: LordRuthwen »

Dlatego, że ta pętla jak nie widzi znaku końca linii to się dla tej linii nie wykonuje, wciśnij enter po ostatnim wpisie.

A nie prościej by było zamiast tego:

Kod: Zaznacz cały

x=`echo ${LINE} | cut -d ':' -f1` 
y=`echo ${LINE} | cut -d ':' -f2` 
z=`echo ${LINE} | cut -d ':' -f3`   
echo $x $y "PESEL:" $z
Zrobić tak?

Kod: Zaznacz cały

echo $LINE | awk -F: '{print $1 " " $2 " - PESEL: " $3}'
No i nie masz nigdzie ograniczenia tylko dla imienia "Jan", o czym wspominasz.
szkodnik25
Posty: 2
Rejestracja: 09 grudnia 2012, 20:28

Post autor: szkodnik25 »

LordRuthwen pisze:Dlatego, że ta pętla jak nie widzi znaku końca linii to się dla tej linii nie wykonuje, wciśnij enter po ostatnim wpisie.
Tak, już się zorientowałem :P Nie mieliśmy jeszcze awk, więc wolę zrobić w ten sposób. Dziękuję serdecznie za pomoc

Ograniczenie dodałem tu:

Kod: Zaznacz cały

echo $x $y "PESEL:" $z | grep Jan
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Trochę poniewczasie, ale w bashu najprościej będzie to pewnie tak:

Kod: Zaznacz cały

while IFS=: read -r imie nazwisko pesel; do echo "$imie $nazwisko PESEL: $pesel"; done <plik.txt | grep Jan
Awk daje trochę większe pole do uproszczeń:

Kod: Zaznacz cały

awk -F':' '/Jan/ {print $1" "$2" PESEL:" $3}' plik.txt
Awatar użytkownika
markossx
Beginner
Posty: 489
Rejestracja: 26 maja 2007, 16:01
Lokalizacja: Polska

Post autor: markossx »

Nie ważne lessmian2, że poniewczasie - Twoje rady zawsze cenne :)
ODPOWIEDZ