[solved] Bash Script - Zeilen kürzen

  • Habe folgenden Befehl mit Ausgabe:


    Code
    mona ~ # cat /var/log/daemon.log | grep hddtemp | tail -n 5
    Feb  3 13:51:47 mona hddtemp[8985]: /dev/hda: SAMSUNG SV1604N: 40 C
    Feb  3 13:54:47 mona hddtemp[8985]: /dev/hda: SAMSUNG SV1604N: 40 C
    Feb  3 13:57:47 mona hddtemp[8985]: /dev/hda: SAMSUNG SV1604N: 40 C
    Feb  3 13:59:39 mona hddtemp[23527]: /dev/hda: SAMSUNG SV1604N: 40 C
    Feb  3 14:04:39 mona hddtemp[23527]: /dev/hda: SAMSUNG SV1604N: 40 C

    würde aber lieber haben, das es so aussieht:

    Code
    Feb  3 13:51:47 40 C
    Feb  3 13:54:47 40 C
    Feb  3 13:57:47 40 C
    Feb  3 13:59:39 40 C
    Feb  3 14:04:39 40 C


    Tx

  • etwas overkill aber einfach:


    grep hddtemp /var/log/daemon.log | tail -n 5 | awk '{ print $9" "$10 }'


    uwe

    server: yavdr trusty testing, 2 * L5420, 32GB, 64TB RAID6 an OctopusNet (DVBS2- 8 ) + minisatip@dsi400 (DVBS2- 4 )
    frontends: kodi und xine

  • grep hddtemp /var/log/daemon.log | tail -n 5 | awk '{ print $1" "$2" "$3" "$9" "$10 }'


    cat /var/log/daemon.log | grep hddtemp | cut -f 1,3,4,10,11 -d " " | tail -n 5


    Funktioniert


    tx

  • Kleine Anmerkung noch:


    es ist besser, bei


    cat /var/log/daemon.log | grep hddtemp | cut -f 1,3,4,10,11 -d " " | tail -n 5


    den tail nach vorne zu setzen, sonst muss 'cut' alle Zeilen durchackern, obwohl nur die letzten fuenf gebraucht werden (und es voellig reicht, die zu bearbeiten).


    Gruss
    uwe


    P.S. dass das Datum auch mit rein soll, habe ich leider komplet ausgeblendet gehabt :)

    server: yavdr trusty testing, 2 * L5420, 32GB, 64TB RAID6 an OctopusNet (DVBS2- 8 ) + minisatip@dsi400 (DVBS2- 4 )
    frontends: kodi und xine

  • Zitat

    Original von wilderigel
    cat /var/log/daemon.log | grep hddtemp | cut -f 1,3,4,10,11 -d " " | tail -n 5


    "cut" wird nicht mehr das gewünschte Ergebnis liefern, sobald der Tag zweistellig ist (und damit die zweite Leerstelle zwischen Monat und Tag, die cut als Trennzeichen dient, wegfällt). Die awk-Variante ist aber ok.

  • OK stimmt.


    Weil wir schon dabei sind:

    Code
    mona ~ # ls -lh /var/lib/video/download/fertig/
    insgesamt 5,8G
    -rw-r--r--  1 mldonkey mldonkey 705M 2004-11-27 14:08 Datei name 1.mpg
    drwxr-xr-x  2 mldonkey mldonkey 4,0K 2004-12-07 18:32 Datei2
    -rw-r--r--  1 root     root     3,2G 2005-01-29 12:48 SUSE-Linux-9.2-FTP-DVD.iso
    -rw-r--r--  1 root     root     612M 2004-11-10 16:10 SUSE-Linux-9.2-LiveCD-64bit.iso
    -rw-r--r--  1 root     root     1,3G 2004-10-23 21:56 SUSE-Linux-9.2-LiveDVD.iso


    Wie bekomme ich da den vollen Dateinamen?

    Code
    awk '{ print $5" "$8" "$9" "$10 }'

    funktioniert, aber bei mehreren Leerzeichen fehlt halt ein Teil.

  • Zitat

    Original von umaier
    Kleine Anmerkung noch:


    es ist besser, bei


    cat /var/log/daemon.log | grep hddtemp | cut -f 1,3,4,10,11 -d " " | tail -n 5


    useless use of cat. grep hddtemp /var/log/daemon.log reicht völlig


    gruss
    jan

  • Ihr schiesst hier wieder mit Spatzen auf Kanonen...


    sed -n -e "s/^\(.*\) [a-zA-Z]* hddtemp.* \([0-9]*\) C$/\1 \2 C/p" /var/log/daemon.log | tail -n 5


    Der Reihe nach erklärt:
    ^ - Zeilenanfang
    \(.*\) - das Datum als \1
    [a-zA-Z]* - der Rechnername 'mona' o.ä.
    hddtemp - Filtert die benötigten Zeilen
    .* - überspringt den unnötigen Teil
    \([0-9]*\) - die Zahl als \2
    C - das C
    $ - Zeilenende.


    Die Ausgabe \1 \2 C ist dann das, was wirklich ausgegeben wird. Mit leichten Variationen kann man so jeden Teil der Zeile einzeln fangen und alles neu zusammen setzen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!