
Ich habe eine Liste mit Zeichenfolgen im folgenden Format. Welche Befehle könnte ich verwenden, um die jeweiligen Abschnitte zu extrahieren? Ich dachte daran, grep zu verwenden, um die Schlüsselwörter zu extrahieren, z. B.: ADD, Benutzername (atra522) usw. Wie gehe ich dieses Problem an?
cop1010 ADD atra522,Allison Track,CT,canada
Ich weiß, wie ich mit Cut oder Awk alle Felder durch Suchen nach Kommas erhalte, aber ich weiß nicht, wie es mit dem ersten Feld „cop1010 ADD atra522“ funktioniert.
Antwort1
Sie haben gesagt bash
, also machen wir alles mit integrierten Shell-Funktionen:
$ inp="cop1010 ADD atra522,Allison Track,CT,canada"
$ IFS=, fields=($inp)
$ echo ${fields[0]}
cop1010 ADD atra522
$ echo ${fields[1]}
Allison Track
$ echo ${fields[2]}
CT
$ echo ${fields[3]}
canada
$ IFS=\ cmd=(${fields[0]})
$ echo ${cmd[0]}
cop1010
$ echo ${cmd[1]}
ADD
$ echo ${cmd[2]}
atra522
$
Sie können sie alle als Variablen festlegen (anstatt sie wiederzugeben) und müssen nie eine Subshell starten awk
, um cut
, oder ein anderes Tool auszuführen.
Antwort2
Sie können die Funktion von awk verwenden split
, um das erste Feld weiter in ein Array aufzuteilen, z. B.
echo 'cop1010 ADD atra522,Allison Track,CT,canada' |
awk -F, '{
split($1,a,"[ \t]+");
if (a[2] == "ADD") {
printf "Adding user: %s\n", a[3];
}
}'
Antwort3
Python-Lösung:
import re,sys;
for l in sys.stdin:
if 'ADD' in l:
data = [re.split(",",l.rstrip("\n"))[0].split()[-1]]+re.split(",",l.rstrip("\n"))[1:]
print " ".join(data)
data = []
Getestet mit benutzerdefinierter Datei basierend auf dem Beispiel des OP:
$ cat input.txt
cop1010 ADD atra522,Allison Track,CT,canada
some other stuff
testuser ADD test522,Allison TEST,CT,germany
$ python user_data.py < input.txt
atra522 Allison Track CT canada
test522 Allison TEST CT germany
Aus Gründen der Python-3-Kompatibilität und der übersichtlichen Datenausgabe könnten wir Folgendes tun:
$ cat user_data.py
from __future__ import print_function
import re,sys;
for l in sys.stdin:
if 'ADD' in l:
data = [re.split(",",l.rstrip("\n"))[0].split()[-1]]+re.split(",",l.rstrip("\n"))[1:]
print("Username: " + data[0])
print("Real Name: " + data[1])
print("Some kind of two char string: "+ data[2])
print("Location: " + data[3])
print("- - -")
data = []
$ python user_data.py < input.txt
Username: atra522
Real Name: Allison Track
Some kind of two char string: CT
Location: canada
- - -
Username: test522
Real Name: Allison TEST
Some kind of two char string: CT
Location: germany
- - -