ubuntuusers.de

Bash: Letztes Zeichen einer Zeile

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

Laines

Anmeldungsdatum:
27. September 2006

Beiträge: 99

Hallo, ich habe eine Datei in der zwei Zeilen stehen.

1
2
Das ist eine Testzeile x
Das ist die zweite Zeil y

ich möchte jetzt das Letzte Zeichen jeder Zeile in einer Seperate Variable haben.

1
2
VariableFürZeileEins sollte dann "x" enthalten
VariableFürZeileZwei sollte dann "y" enthalten

Danke schonmal fürs lesen!

Lysander

Avatar von Lysander

Anmeldungsdatum:
30. Juli 2008

Beiträge: 2669

Wohnort: Hamburg

Falls es Python sein darf:

1
2
3
4
5
6
7
In [48]: data = u"""
Das ist eine Testzeile x
Das ist die zweite Zeil y
"""

In [52]: [line.rstrip()[-1] for line in StringIO(data) if line.rstrip()]
Out[52]: [u'x', u'y']

Oder als komplettes Script (ungetestet):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys

def get_last_char(filename):
    with open(filename, "r") as infile:
        for line in StringIO(data) if line.rstrip():
            yield line.rstrip()[-1] 

if __name__ == '__main__'
    print list(get_last_char(sys.argv[1]))

Das ganze kannst Du dann einfach via:

1
./script.py dateiname

aufrufen. Die Ausgabe kann man dann ggf. noch umformatieren, sofern Du sie anderweitig verwenden willst.

Laines

(Themenstarter)

Anmeldungsdatum:
27. September 2006

Beiträge: 99

Lysander schrieb:

Falls es Python sein darf:

1
2
3
4
5
6
7
In [48]: data = u"""
Das ist eine Testzeile x
Das ist die zweite Zeil y
"""

In [52]: [line.rstrip()[-1] for line in StringIO(data) if line.rstrip()]
Out[52]: [u'x', u'y']

Oder als komplettes Script (ungetestet):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys

def get_last_char(filename):
    with open(filename, "r") as infile:
        for line in StringIO(data) if line.rstrip():
            yield line.rstrip()[-1] 

if __name__ == '__main__'
    print list(get_last_char(sys.argv[1]))

Das ganze kannst Du dann einfach via:

1
./script.py dateiname

aufrufen. Die Ausgabe kann man dann ggf. noch umformatieren, sofern Du sie anderweitig verwenden willst.

Erstmal riesen Dank für die Mühe die du dir gemacht hast. Umso mehr tuts mir leid das ich es als Shell (Bash) Script brauche. Hatte es in den Titel geschrieben, leider ist es dardurch warscheinlich nicht sehr Present gewesen.

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Und in Bash:

1
2
3
4
5
6
#!/bin/bash

while read -r line
do
	echo "${line:(-1)}"
done < laines.dat

Wobei eben in laines.dat deine Daten stehen. ☺

– edit: Die Essenz dessen ist übrigens hier im Bash Reference Manual beschrieben.

Hefeweiz3n Team-Icon

Moderator, Webteam
Avatar von Hefeweiz3n

Anmeldungsdatum:
15. Juli 2006

Beiträge: 5814

Wohnort: Ankh-Morpork

Alternativ, falls du nicht nur den letzten char in der Zeile brauchst sondern das letzte Wort in einer Variable brauchst einfach das folgende Kommando in die While-Schleife. Alternativ auch einfach ausgeben, je nachdem wie du das brauchst.

1
var=`echo "$a" | sed 's/.* //'`

Beispiel:

Das ist eine Testzeile xyz

ergibt:

xyz

–-
Nachtrag: Wenn du alles in einer Variablen brauchst einfach nen Array nehmen und dann in der while-schleife noch eine Zählvariable einführen und mit dieser auf den Array zugreifen.

Antworten |