Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: OPGELOST mawk (of awk) probleempje  (gelezen 1648 keer)

Offline BaukeP

  • Lid
OPGELOST mawk (of awk) probleempje
« Gepost op: 2010/08/21, 23:04:35 »
Hallo,

Ik probeer van de output van ls -l met mawk het lijstje te maken zoals ik dat nodig heb, en dat lukt niet dus vandaar deze post

Ik krijg bijvoorbeeld:
-rwxrwxrwx 1 bauke bauke    236924 2010-08-14 14:28 Yvonne Kroonenberg - Het zit op de bank en het zapt.epub*
-rwxrwxrwx 1 bauke bauke    188119 2010-08-14 14:28 Yvonne Kroonenberg - Meneer Als Ik U Zie Heb Ik Zo'n Zin In Ruzie.epub*
-rwxrwxrwx 1 bauke bauke     92616 2010-08-14 14:28 Yvonne Kroonenberg - Meneer Als Ik U Zie Heb Ik Zo'n Zin In Ruzie.jpg*
-rwxrwxrwx 1 bauke bauke    240989 2010-08-17 14:11 Yvonne Kroonenberg - Wat rijmt er op huwelijk.epub*

en ik wil:
Yvonne Kroonenberg - Het zit op de bank en het zapt.epub* 236924 2010-08-14 14:28
Yvonne Kroonenberg - Meneer Als Ik U Zie Heb Ik Zo'n Zin In Ruzie.epub* 188119 2010-08-14 14:28

Het is niet zo moeilijk, likt me, maar ik kan nergens in awk een mogelijkheid vinden om bv veld 8 tm eind te combineren tot 1 veld

Commando (ongeveer) zou dan zijn:

ls -l | mawk '{print $8- " " $5 " " $6 " " $7}'

maar die 8- is dus fout, en uitschrijven (met een var. aantal velden) geeft een heleboel spaties bij korte bestandsnamen.

Wie helpt me?

Alvast bedankt

Bauke
« Laatst bewerkt op: 2010/08/30, 21:30:11 door BaukeP »

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: mawk (of awk) probleempje
« Reactie #1 Gepost op: 2010/08/21, 23:16:57 »
Ik weet niet zo 1, 2, 3 een goede mawk regel. Maar mag ik weten wat je wilt bereiken?
Het wordt namelijk afgeraden de uitvoer van ls te verwerken

Dit is een andere manier om bestanden in de huidige map te krijgen:
for bestand in *; do
  echo $bestand;
  # Doe hier dingetjes met de variabele $bestand
done;
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline BaukeP

  • Lid
Re: mawk (of awk) probleempje
« Reactie #2 Gepost op: 2010/08/22, 01:42:20 »
Ik doe dit wel vaker (de output met mawk bewerken). Al was het alleen maar om de kolommen een beetje goed uit te lijnen.

Met du bijvoorbeeld gebruik ik deze functie (in bashrc) in een alias:

function b { mawk '$1 ~ /^(B)|^\// {printf("%-20s %6s %6s %6s %18s\n", $1, $2, $3, $4, $6)}';}

alias df='df -h | b'

Werkt prima hier.

Voor het snel vergelijken van m'n ebook verzameling heb ik het volgende in een scriptje staan:
#!/bin/bash
cd /media/MedExt4/BUP/Boeken
ls > ~/BoekenMedExt4
cd /mnt/Data/Boeken
ls > ~/BoekenLT
cd /media/DataDT/Boeken
ls > ~/BoekenDT

meld --diff ~/BoekenLT ~/BoekenMedExt4 ~/BoekenDT

PS ls is een alias (alias ls='ls -F --show-control-chars --color=auto')

Dit vergelijkt alleen de titels en dat vind ik achteraf een beetje magertjes. Vandaar dat ik de lijstjes wil uitbreiden met de datum en de grootte.
En dat dacht ik even met mawk te doen. Moet kunnen denk ik.

Bauke




Offline BaukeP

  • Lid
Re: mawk (of awk) probleempje
« Reactie #3 Gepost op: 2010/08/22, 02:15:56 »
Ik ben alweer iets verder.

Dit is de output van:

ls -l | mawk 'BEGIN {for ( i=8; i<=NF; i++ )} { print $i " ";} {print $5 " "$6 " " $7}'

Yvonne
287766 2010-03-13 20:10
Yvonne
761735 2010-04-01 15:41

De for lus loopt niet door en hij zet de rest op een nieuwe regel (ik dacht dat met de ; te regelen

Bauke

edit: De lus loopt nu wel, maar ik krijg ieder veld op een nieuwe regel. Wie het weet mag het zeggen. We gaan morgen verder.
« Laatst bewerkt op: 2010/08/22, 02:32:09 door BaukeP »

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: mawk (of awk) probleempje
« Reactie #4 Gepost op: 2010/08/22, 02:40:58 »
Oke, als je het perse met awk wilt :P
Ik bedacht me iets met een range (reeks) printen. Hieronder een scriptje dat alle velden vanaf 6 print:
ls -l | awk '{for (i=6;i<NF+1;i++) {printf "%s ",$i};print ""}'

This should do the trick ;)
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline BaukeP

  • Lid
Re: mawk (of awk) probleempje
« Reactie #5 Gepost op: 2010/08/24, 00:21:27 »
Inderdaad, werkt fantastisch!

Nog een vraagje (als het mag):

Ik krijg uit de volgende regel:
Aug 20, 2010    8.80    8.86    8.57    8.66    15,275
deze regel:
20100820 8.80 8.86 8.57 8.57 8.66 15275
en dat is prima.

Het gaat alleen fout bij datums waar de dag kleiner is dan 10 (oorspronkelijk veld 2) en het lukt me niet om daar op een slimme manier een 0 voor te zetten;  dus 1 moet 01 worden en 2 02.

gsub, sub, if etc heb ik geprobeerd, maar niet werkend gekregen.

Alvast bedankt

Bauke

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: mawk (of awk) probleempje
« Reactie #6 Gepost op: 2010/08/24, 09:38:42 »
Wat is je code dan?
En wat denk je van zoiets als:
for f in *; do
  echo "`stat -c%s -c%x "$f"` $f";
done;
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline BaukeP

  • Lid
Re: mawk (of awk) probleempje
« Reactie #7 Gepost op: 2010/08/24, 17:56:15 »
Lijkt bijna hogere wiskunde .................. en ik ben al een tijdje van school af  ;).

Ik vond nog de printf functie en die lost het ook op:
{printf("%3s %3s %4d %02d %02d %5.2f %5.2f %5.2f %5.2f %10d\n", ticker, naam, datum,$3,$1,$2,$4,$5,$6,$7,$8)}'

met %02d = numeriek, 2 pos. 0 = aanvullen met voorloopnullen.

En meteen de volgende (die kerel blijft bezig hé)
Dit lukt:
{ticker="YUII"} {naam="Yuhe International, Inc"}               worden variabelen die af te drukken zijn (zie boven)

De datum moet speciaal gemaakt worden:
{datum= printf("%4d %02d %02d",$3,$1,$2)} wekt dus niet        syntax error at or near printf

Waarom dit gedoe? Ik wil de naam als 1 veld zien ondanks de spaties.

Wat ik tot dusver heb:
Inputbestand:

Aug 16, 2010    8.90    8.90    8.78    8.84    76,038
Aug 13, 2010    8.96    9.00    8.96    8.96    29,102
Aug 12, 2010    8.54    9.02    8.53    8.91    20,343
Aug 11, 2010    8.85    9.00    8.53    8.80    22,102
Aug 10, 2010    9.43    9.43    8.85    8.95    30,036

awk routine:
mawk 'BEGIN{OFS=","}{gsub(/\,/,"")} \
{ticker="YUII"} {naam="Yuhe International, Inc"}  \
{gsub(/Jan/,"01")}{gsub(/Feb/,"02")}{gsub(/Mar/,"03")}{gsub(/Apr/,"04")}{gsub(/May/,"05")}{gsub(/Jun/,"06")} \
{gsub(/Jul/,"07")}{gsub(/Aug/,"08")}{gsub(/Sep/,"09")}{gsub(/Oct/,"10")}{gsub(/Nov/,"11")}{gsub(/Dec/,"12")} \
{datum= printf("%4d %02d %02d",$3,$1,$2)} \
{printf("%3s %3s %4d %02d %02d %5.2f %5.2f %5.2f %5.2f %10d\n", ticker,naam, datum,$3,$1,$2,$4,$5,$6,$7,$8)}' \
/home/bauke/YUIIkoersen > /home/bauke/tmp

mawk 'BEGIN{OFS=","}{print $1,$2,$3$4$5,$6,$7,$8,$9,$10}' /home/bauke/tmp > /home/bauke/tmp2

Hij zal nu wel fout gaan want ik was bezig met het aanbrengen van de datum etc., maar het geeft je vast een idee. (Hoe slecht dit is aangepakt bijvoorbeeld)

En dan ben ik er nog niet, want hij moet het met meerdere bestanden doen (maar dat is het  volgende (1 voor 1)

Heel erg bedankt voor de hulp!
Bauke

Offline BaukeP

  • Lid
Re: mawk (of awk) probleempje
« Reactie #8 Gepost op: 2010/08/30, 21:29:43 »
Alles loopt!

Gewoon meerdere mawk statements.

Bauke