[BASH] praca z tekstem
-
- Piegowaty Guziec
- Posty: 3
- Rejestracja: 12 lis 2008, 17:18
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.10
- Środowisko graficzne: Fluxbox
[BASH] praca z tekstem
Mam plik txt a w nim znajduje się coś takiego:
440000 Re: Kurs EUR/PLN kigam <pilot.zolwia@gmail.com> Thu, 04 Sep 2008 18:45:00 +0200 <48C0108C.7070505@gmail.com> <65d5356e-0bb4-4e2f-aef2-930527a8643b@r35g2000prm.googlegroups.com> <491a4$48c0065a$20711@news.teranews.com> 1553 13 Xref: news2.icm.edu.pl pl.biznes.wgpw:440000
440001 Re: FUTRA (FW20U8) 2626 "domestos" <gracz100.SKASUJ@gazeta.pl> Thu, 4 Sep 2008 17:10:03 +0000 (UTC) <g9p4pb$n20$1@inews.gazeta.pl> <g9o7n9$gd3$1@inews.gazeta.pl> 859 4 Xref: news2.icm.edu.pl pl.biznes.wgpw:440001
i mam zapisać do innego pliku.txt sam adres email czyli z tego fragmentu będzie to:
pilot.zolwia@gmail.com i gracz100.SKASUJ@gazeta.pl
powinno to się wykonać z wykorzystaniem polecenia sed. Kombinowałem z tym i za bardzo mi to nie wychodzi.
Zapisuje mi to co znajduje się w ostatnim "<>" czyli:
491a4$48c0065a$20711@news.teranews.com i g9o7n9$gd3$1@inews.gazeta.pl
Trzeba jakiś na pewno warunek żeby tylko z pierwszego "<>" pobierało ale za bardzo nie wiem jak. Jeszcze mam jedna prosbe za bardzo nie wiem jak zrobic zeby mi zliczalo ilosc tych samych wyrazow w pliku.txt i zapisywalo to do innego pliku . Byłbym bardzo wdzięczny za pomoc.
440000 Re: Kurs EUR/PLN kigam <pilot.zolwia@gmail.com> Thu, 04 Sep 2008 18:45:00 +0200 <48C0108C.7070505@gmail.com> <65d5356e-0bb4-4e2f-aef2-930527a8643b@r35g2000prm.googlegroups.com> <491a4$48c0065a$20711@news.teranews.com> 1553 13 Xref: news2.icm.edu.pl pl.biznes.wgpw:440000
440001 Re: FUTRA (FW20U8) 2626 "domestos" <gracz100.SKASUJ@gazeta.pl> Thu, 4 Sep 2008 17:10:03 +0000 (UTC) <g9p4pb$n20$1@inews.gazeta.pl> <g9o7n9$gd3$1@inews.gazeta.pl> 859 4 Xref: news2.icm.edu.pl pl.biznes.wgpw:440001
i mam zapisać do innego pliku.txt sam adres email czyli z tego fragmentu będzie to:
pilot.zolwia@gmail.com i gracz100.SKASUJ@gazeta.pl
powinno to się wykonać z wykorzystaniem polecenia sed. Kombinowałem z tym i za bardzo mi to nie wychodzi.
Zapisuje mi to co znajduje się w ostatnim "<>" czyli:
491a4$48c0065a$20711@news.teranews.com i g9o7n9$gd3$1@inews.gazeta.pl
Trzeba jakiś na pewno warunek żeby tylko z pierwszego "<>" pobierało ale za bardzo nie wiem jak. Jeszcze mam jedna prosbe za bardzo nie wiem jak zrobic zeby mi zliczalo ilosc tych samych wyrazow w pliku.txt i zapisywalo to do innego pliku . Byłbym bardzo wdzięczny za pomoc.
-
- Wytworny Kaczor
- Posty: 418
- Rejestracja: 09 lut 2007, 23:17
- Płeć: Mężczyzna
- Wersja Ubuntu: 9.10
- Środowisko graficzne: GNOME
- Architektura: x86
- Kontakt:
Odp: [BASH] praca z tekstem
Kod: Zaznacz cały
cat plik.txt | egrep -o "<.+> (Sun|Mon|Tue|Wed|Thu|Fri|Sat)" | egrep -o "<.+>" | tr -d "<>" > wynik.txt
-
- Piegowaty Guziec
- Posty: 3
- Rejestracja: 12 lis 2008, 17:18
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.10
- Środowisko graficzne: Fluxbox
Odp: [BASH] praca z tekstem
dawidgarus w pliku wynik.txt nic sie nie znajduje, wynik.txt jest pusty ;/ z tego co prowadzacy mowil to sie robi przez sed ale niestety ja na tym zbyt dobrze sie nie znam;/
-
- Sędziwy Jeż
- Posty: 39
- Rejestracja: 09 lis 2008, 00:47
- Płeć: Mężczyzna
- Wersja Ubuntu: inny OS
- Środowisko graficzne: GNOME
Odp: [BASH] praca z tekstem
Poczytaj sobie o sed i wyrażaniach regularnych.
-
- Wytworny Kaczor
- Posty: 418
- Rejestracja: 09 lut 2007, 23:17
- Płeć: Mężczyzna
- Wersja Ubuntu: 9.10
- Środowisko graficzne: GNOME
- Architektura: x86
- Kontakt:
Odp: [BASH] praca z tekstem
niemożliwe. dla przykładu, który podałeś wychodzi prawidłowy wynik:
Kod: Zaznacz cały
~$ cat > plik.txt
440000 Re: Kurs EUR/PLN kigam <pilot.zolwia@gmail.com> Thu, 04 Sep 2008 18:45:00 +0200 <48C0108C.7070505@gmail.com> <65d5356e-0bb4-4e2f-aef2-930527a8643b@r35g2000prm.googlegroups.com> <491a4$48c0065a$20711@news.teranews.com> 1553 13 Xref: news2.icm.edu.pl pl.biznes.wgpw:440000
440001 Re: FUTRA (FW20U 2626 "domestos" <gracz100.SKASUJ@gazeta.pl> Thu, 4 Sep 2008 17:10:03 +0000 (UTC) <g9p4pb$n20$1@inews.gazeta.pl> <g9o7n9$gd3$1@inews.gazeta.pl> 859 4 Xref: news2.icm.edu.pl pl.biznes.wgpw:44000
~$ cat plik.txt | egrep -o "<.+> (Sun|Mon|Tue|Wed|Thu|Fri|Sat)" | egrep -o "<.+>" | tr -d "<>" > wynik.txt
~$ cat wynik.txt
pilot.zolwia@gmail.com
gracz100.SKASUJ@gazeta.pl
- daris
- Sędziwy Jeż
- Posty: 66
- Rejestracja: 26 lut 2007, 17:20
- Płeć: Mężczyzna
- Wersja Ubuntu: 15.04
- Środowisko graficzne: KDE Plasma
- Architektura: x86_64
Odp: [BASH] praca z tekstem
Kod: Zaznacz cały
cat plik.txt | grep -o "<[a-zA-Z0-9.\$]*@[a-zA-Z0-9.\$]*>" | tr -d "<>"

-
- Piegowaty Guziec
- Posty: 3
- Rejestracja: 12 lis 2008, 17:18
- Płeć: Mężczyzna
- Wersja Ubuntu: 8.10
- Środowisko graficzne: Fluxbox
Odp: [BASH] praca z tekstem
dawidgarus:
sorki dla 2 takich linijek jak ja podalem dziala ale jak mam np. duzo wiecej ich to w wynik.txt nic, niemam moze da sie jakos zeby przy wiekszej ilosci tez dzialalo?
daris:
w twoim wypisuje wszystkie co sa "<>" a tu chodzi tylko o to pierwsze wystapienie
EDIT:
troche sie pobawilem w tym i zrobilem cos takiego i raczej dziala
cat plik.txt | grep -o "<[a-zA-Z0-9.\$]*@[a-zA-Z0-9.\$]*> [A-Z.\$]" | grep -o "<[a-zA-Z0-9.\$]*@[a-zA-Z0-9.\$]*>" | tr -d "<>" | sort > wynik.txt
a teraz sie zastawialem jak teraz napisac zeby w pliku powiedzmy o nazwie ostateczne.txt zostaly tylko pojedyncze wystapienia danego maila i obok ilosc wystapien go w pliku wynik.txt . Tutaj myslalem jakos z while ale za bardzo nie wiem.
jak by panowie dalo sie jeszcze jakis pomysl do tego bylbym wdzieczny
sorki dla 2 takich linijek jak ja podalem dziala ale jak mam np. duzo wiecej ich to w wynik.txt nic, niemam moze da sie jakos zeby przy wiekszej ilosci tez dzialalo?
daris:
w twoim wypisuje wszystkie co sa "<>" a tu chodzi tylko o to pierwsze wystapienie
EDIT:
troche sie pobawilem w tym i zrobilem cos takiego i raczej dziala
cat plik.txt | grep -o "<[a-zA-Z0-9.\$]*@[a-zA-Z0-9.\$]*> [A-Z.\$]" | grep -o "<[a-zA-Z0-9.\$]*@[a-zA-Z0-9.\$]*>" | tr -d "<>" | sort > wynik.txt
a teraz sie zastawialem jak teraz napisac zeby w pliku powiedzmy o nazwie ostateczne.txt zostaly tylko pojedyncze wystapienia danego maila i obok ilosc wystapien go w pliku wynik.txt . Tutaj myslalem jakos z while ale za bardzo nie wiem.
jak by panowie dalo sie jeszcze jakis pomysl do tego bylbym wdzieczny
-
- Wytworny Kaczor
- Posty: 418
- Rejestracja: 09 lut 2007, 23:17
- Płeć: Mężczyzna
- Wersja Ubuntu: 9.10
- Środowisko graficzne: GNOME
- Architektura: x86
- Kontakt:
Odp: [BASH] praca z tekstem
napisałem skrypt w php (wymagana paczka php5-cli):
zapisać skrypt, nadać prawa do wykonywania i:
albo bezpośrednio:
Kod: Zaznacz cały
#!/usr/bin/php5
<?php
$handle = fopen("php://stdin", "r");
while(!feof ($handle)) {
$line = trim(fgets($handle, 4096));
isset($count[$line]) ? $count[$line]++ : $count[$line]=1;
}
fclose($handle);
foreach ($count as $k => $v) {
if (!empty($k)) {
echo $k." ".$v."\n";
}
}
?>
Kod: Zaznacz cały
./skrypt < wynik.txt > ostateczny.txt
Kod: Zaznacz cały
cat plik.txt | grep -o "<[a-zA-Z0-9.\$]*@[a-zA-Z0-9.\$]*> [A-Z.\$]" | grep -o "<[a-zA-Z0-9.\$]*@[a-zA-Z0-9.\$]*>" | tr -d "<>" | sort | ./skrypt > ostateczny.txt
- daris
- Sędziwy Jeż
- Posty: 66
- Rejestracja: 26 lut 2007, 17:20
- Płeć: Mężczyzna
- Wersja Ubuntu: 15.04
- Środowisko graficzne: KDE Plasma
- Architektura: x86_64
Odp: [BASH] praca z tekstem
Kod: Zaznacz cały
#!/bin/bash
plik=`cat plik.txt`
maile=`echo $plik | grep -o "<[a-zA-Z0-9.\$]*@[a-zA-Z0-9.\$]*> [A-Z.\$]" | grep -o "<[a-zA-Z0-9.\$]*@[a-zA-Z0-9.\$]*>" | tr -d "<>" | sort | uniq`
for mail in $maile
do
zaw+="$mail `echo $plik | grep -o -e $mail | wc -l`\n"
done
echo -e $zaw | column -t
Kod: Zaznacz cały
chmod +x nazwa_pliku
./nazwa_pliku

Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 24 gości