Strona 1 z 1

[+] Skrypt w bashu na wypisanie danych z pliku

: 09 grudnia 2012, 20:30
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.

: 09 grudnia 2012, 21:27
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.

: 09 grudnia 2012, 21:42
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

: 10 grudnia 2012, 20:53
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

: 11 grudnia 2012, 16:04
autor: markossx
Nie ważne lessmian2, że poniewczasie - Twoje rady zawsze cenne :)