eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingtrochę NTG - edytor tekstowy z pracą na blokach tekstuRe: trochę NTG - edytor tekstowy z pracą na blokach tekstu
  • Data: 2014-08-07 20:45:45
    Temat: Re: trochę NTG - edytor tekstowy z pracą na blokach tekstu
    Od: Tomasz Sowa <t...@N...ttmath.org> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Witam, dnia Tue, 05 Aug 2014 16:00:23 +0200
    Adam <a...@p...onet.pl> napisał:

    > > Oczywiście znasz Awk ?
    >
    > oczywiście, że nie znam ;)
    >
    > Ale z opisu wynika, że jest to mocne narzędzie do przetwarzania
    > tekstu. W moim przypadku - nie widzę zastosowania :(
    > Brak jakichkolwiek punktów zaczepienia.

    Masz punkt zaczepienia -- białe znaki (separatory).

    > Byłby dobry, gdybym chciał zmienić jeden separator na inny - a w moim
    > przypadku jest nieco inaczej. Jest do pewnego momentu stała szerokość
    > kolumn, później przesunięcie przez ileś wierszy, później znów
    > przesunięcie, przykładowo:
    >
    > NR data opis
    > -- -------- ----------
    > 1 14/08/01 RazDwaTrzy
    > 2 14/08/02 inny opis
    > 3 14/07/30 werewr
    > (...)
    > 10 14/07/23 przesuniecie
    > 11 14/08/02 i tak dalej

    To nie jest problem, poprostu separatorem jest biały znak i to wszystko
    (szerokości kolumn z tekstem cie nie interesują). Jedynie trzeba uważać
    na białe znaki w trzeciej kolumnie.

    Twój przykład:
    $ cat test.txt
    1 14/08/01 RazDwaTrzy
    2 14/08/02 inny opis
    3 14/07/30 werewr
    10 14/07/23 przesuniecie
    11 14/08/02 i tak dalej

    Z użyciem awk to może być tak:
    $ cat test.txt | awk '{ printf("%s \";\" %s ",$1,$2); sub(/([^ ]+)[ ]+([^ ]+)[
    ]+/,"",$0); print $0; }'
    1 ";" 14/08/01 RazDwaTrzy
    2 ";" 14/08/02 inny opis
    3 ";" 14/07/30 werewr
    10 ";" 14/07/23 przesuniecie
    11 ";" 14/08/02 i tak dalej
    To sub() to taka sztuczka aby wydrukować całą trzecią kolumnę, bez tego
    wydrukowałoby się tylko do pierwszej spacji w trzeciej kolumnie.

    Można też z użyciem seda:
    $ cat test.txt | sed -E 's/([^ ]+)[ ]+([^ ]+)[ ]+(.*)/\1 ";" \2 \3/'
    1 ";" 14/08/01 RazDwaTrzy
    2 ";" 14/08/02 inny opis
    3 ";" 14/07/30 werewr
    10 ";" 14/07/23 przesuniecie
    11 ";" 14/08/02 i tak dalej


    --
    Tomek


Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: