-
1. Data: 2010-06-26 20:50:14
Temat: Linuxowy skrypt pod Winda
Od: "Boss Moss" <s...@g...pl>
Witam.
Czy ktos z szanownych kolegow potrafi mi pomoc w przelozeniu skryptu
linuxowego:
zawartosc mojplik.txt, separatory pol -> |
pole1 | pole2 | pole3 | pole4 | pole5 | pole6 | pole7 | pole8 | pole9 |
cat mojplik.txt | awk 'BEGIN { FS = "|" } ; { if ($7==1) print
$1"|"$2"|"$3"|"$4 >"ggg.txt";}'
na postac akceptowalna dla batcha pod Winde (korzystam z UnxUtils). Nie
potrafie sobie poradzic z zamiana cudzyslowow. Pierwszy ' chyba na " ale co
z tymi FS = "|" i reszta??? Chyba, ze znacie inna opcje w jaki sposob uzyc
wartosci z 7-mego pola.
Dana linia z mojplik.txt ma sie zapisywac do wynikowego pliku pod
warunkiem, ze w polu 7 pojawi sie wartosc = 1 (srodowisko windows). Metoda
dowolna byle by dzialalo np. w batchu.
Z gory dzieki za ew. podpowiedzi!
Boss Moss
-
2. Data: 2010-06-26 21:12:39
Temat: Re: Linuxowy skrypt pod Winda
Od: Piotr Kulinski <p...@w...pl>
Sat, 26 Jun 2010 22:50:14 +0200, na pl.comp.programming, Boss Moss
napisał(a):
> Witam.
> Czy ktos z szanownych kolegow potrafi mi pomoc w przelozeniu skryptu
> linuxowego:
>
> zawartosc mojplik.txt, separatory pol -> |
>
> pole1 | pole2 | pole3 | pole4 | pole5 | pole6 | pole7 | pole8 | pole9 |
> cat mojplik.txt | awk 'BEGIN { FS = "|" } ; { if ($7==1) print
> $1"|"$2"|"$3"|"$4 >"ggg.txt";}'
>
> na postac akceptowalna dla batcha pod Winde (korzystam z UnxUtils). Nie
> potrafie sobie poradzic z zamiana cudzyslowow. Pierwszy ' chyba na " ale co
> z tymi FS = "|" i reszta??? Chyba, ze znacie inna opcje w jaki sposob uzyc
> wartosci z 7-mego pola.
>
> Dana linia z mojplik.txt ma sie zapisywac do wynikowego pliku pod
> warunkiem, ze w polu 7 pojawi sie wartosc = 1 (srodowisko windows). Metoda
> dowolna byle by dzialalo np. w batchu.
>
> Z gory dzieki za ew. podpowiedzi!
>
> Boss Moss
for w batch-a, ma mozliwość cięcia pliku wejściowego wg zadanych
separatorów, można pobierać wybrane pola i przetwarzać
--
pozdrawiam, GG i SkyPe w X-nagłówku posta, e-mail: zmień wpw na wp
piotr
-
3. Data: 2010-06-26 21:17:05
Temat: Re: Linuxowy skrypt pod Winda
Od: "Boss Moss" <s...@g...pl>
> for w batch-a, ma mozliwość cięcia pliku wejściowego wg zadanych
> separatorów, można pobierać wybrane pola i przetwarzać
Dzieki za odpowiedz. Mozesz podac jakis przyklad? Przyznam szczerze, ze do
tej pory paralem sie bardzo prostymi poleceniami. Niestety petli jeszcze nie
mialem okazji uzywac... :/
B.M.
-
4. Data: 2010-06-26 21:56:44
Temat: Re: Linuxowy skrypt pod Winda
Od: "Grzegorz Niemirowski" <g...@p...onet.pl>
Boss Moss <s...@g...pl> napisał(a):
> Dzieki za odpowiedz. Mozesz podac jakis przyklad? Przyznam szczerze, ze
> do tej pory paralem sie bardzo prostymi poleceniami. Niestety petli
> jeszcze nie mialem okazji uzywac... :/
@echo off
for /f "tokens=1-9 delims=|" %%i in (test.txt) do (
if %%o==1 echo %%i %%j %%k %%l > ggg.txt
)
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 3 days, 3 hours, 0 minutes and 27 seconds
-
5. Data: 2010-06-26 22:38:39
Temat: Re: Linuxowy skrypt pod Winda
Od: "Grzegorz Niemirowski" <g...@p...onet.pl>
Grzegorz Niemirowski <g...@p...onet.pl> napisał(a):
> @echo off
> for /f "tokens=1-9 delims=|" %%i in (test.txt) do (
> if %%o==1 echo %%i %%j %%k %%l > ggg.txt
> )
Zapomniałem o separatorach:
@echo off
for /f "tokens=1-9 delims=|" %%i in (test.txt) do (
if %%o==1 echo %%i^|%%j^|%%k^|%%l > ggg.txt
)
Natomiast jeśli chcesz zrobić po nowoszesnemu to polecam powłokę PowerShell
(jedna linijka):
gc test.txt |? {$_.split("|")[6] -match "1"}|% {$a=$_.split("|");
$a[0]+"|"+$a[1]+"|"+$a[2]+"|"+$a[3] > ggg.txt}
Podany skrypt CMD jest wrażliwy na białe znaki, nie zadziała jeśli będzie
np. | 1 | a nie |1|. Z kolei jednolinijkowiec PS nie jest na to wrażliwy i
dopasowuje każdy string na pozycji 7 (6 licząc od 0) zawierający znak "1".
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 3 days, 3 hours, 35 minutes and 7 seconds
-
6. Data: 2010-06-27 08:55:51
Temat: Re: Linuxowy skrypt pod Winda
Od: "Boss Moss" <s...@g...pl>
> @echo off
> for /f "tokens=1-9 delims=|" %%i in (test.txt) do (
> if %%o==1 echo %%i^|%%j^|%%k^|%%l > ggg.txt
> )
Dzieki Grzegorzu, posunalem sie troche do przodu. Mam jeszcze jedno
pytanie - jezeli szukam wartosci w stringu, np. w polu numer 1 - wartosci >=
1,50 powinienem uzyc przelacznika /L w klauzuli for? Nie do konca mi to
dziala:
""tokens=1-17 delims=|" was unexpected at this time."
Probowalem poskladac zmienne z wszystkich pol - jest ich w pliku wsadowym
17. Ale skladany string na wyjsciu ma ich tylko 10? Wystepuje tutaj jakies
ograniczenie ilosci zmiennych w stringu? W jaki sposob mozna zrzucic do
pliku wyjsciowego cala linie bez dzielenia jej na poszczegolen pola?
Mam jeszcze jeden problem. W danych wejsciowych separatorem dziesietnym jest
"." natomiast w moim systemie jest ",". Da sie w jakis prosty sposob
zamienic te znaki w stringu przed operacja z kaluzula for, tak aby warunek
>= 1,50 mogl byc spelniony?
B.M.
-
7. Data: 2010-06-27 10:17:07
Temat: Re: Linuxowy skrypt pod Winda
Od: Piotr Kulinski <p...@w...pl>
Sun, 27 Jun 2010 10:55:51 +0200, na pl.comp.programming, Boss Moss
napisał(a):
>> @echo off
>> for /f "tokens=1-9 delims=|" %%i in (test.txt) do (
>> if %%o==1 echo %%i^|%%j^|%%k^|%%l > ggg.txt
>> )
>
> Dzieki Grzegorzu, posunalem sie troche do przodu. Mam jeszcze jedno
> pytanie - jezeli szukam wartosci w stringu, np. w polu numer 1 - wartosci >=
> 1,50 powinienem uzyc przelacznika /L w klauzuli for? Nie do konca mi to
> dziala:
> ""tokens=1-17 delims=|" was unexpected at this time."
> Probowalem poskladac zmienne z wszystkich pol - jest ich w pliku wsadowym
> 17. Ale skladany string na wyjsciu ma ich tylko 10? Wystepuje tutaj jakies
> ograniczenie ilosci zmiennych w stringu? W jaki sposob mozna zrzucic do
> pliku wyjsciowego cala linie bez dzielenia jej na poszczegolen pola?
>
> Mam jeszcze jeden problem. W danych wejsciowych separatorem dziesietnym jest
> "." natomiast w moim systemie jest ",". Da sie w jakis prosty sposob
> zamienic te znaki w stringu przed operacja z kaluzula for, tak aby warunek
> >= 1,50 mogl byc spelniony?
>
> B.M.
to może przez test.txt wstępie przejechać sed-em, zmieniając '.' na ','
dla klauzuli for for z tokenami nie wiem o ograniczeniach, natomiast dla
samego batch-a, parametrów może być max 15, jeśli stosujesz więcej należy
posługiwać się poleceniem shift, aby je przesuwać.
--
pozdrawiam, GG i SkyPe w X-nagłówku posta, e-mail: zmień wpw na wp
piotr
-
8. Data: 2010-06-27 11:41:55
Temat: Re: Linuxowy skrypt pod Winda
Od: "Grzegorz Niemirowski" <g...@p...onet.pl>
Boss Moss <s...@g...pl> napisał(a):
> Dzieki Grzegorzu, posunalem sie troche do przodu. Mam jeszcze jedno
> pytanie - jezeli szukam wartosci w stringu, np. w polu numer 1 -
> wartosci >= 1,50 powinienem uzyc przelacznika /L w klauzuli for? Nie do
> konca mi to dziala:
> ""tokens=1-17 delims=|" was unexpected at this time."
> Probowalem poskladac zmienne z wszystkich pol - jest ich w pliku wsadowym
> 17. Ale skladany string na wyjsciu ma ich tylko 10? Wystepuje tutaj
> jakies ograniczenie ilosci zmiennych w stringu? W jaki sposob mozna
> zrzucic do pliku wyjsciowego cala linie bez dzielenia jej na
> poszczegolen pola?
> Mam jeszcze jeden problem. W danych wejsciowych separatorem dziesietnym
> jest "." natomiast w moim systemie jest ",". Da sie w jakis prosty
> sposob zamienic te znaki w stringu przed operacja z kaluzula for, tak
> aby warunek
>> = 1,50 mogl byc spelniony?
> B.M.
Tego niestety nie wiem. Skrypty CMD są dosyć prymitywne i ja bym sobie dał z
nimi spokój i wziął się za PowerShell:
gc test.txt |? {[float]$_.split("|")[6] -ge
1.5}|%{[string]::join("|",$_.split("|")[0..3]) > ggg.txt}
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 3 days, 16 hours, 13 minutes and 37 seconds
-
9. Data: 2010-06-27 17:20:05
Temat: Re: Linuxowy skrypt pod Winda
Od: "Boss Moss" <s...@g...pl>
Serdecznie dziekuje kolegom za pomoc.
B.M.