Die Verwendung von Shell-Tools für diese Aufgabe wäre gefährlich wie sort
wird nicht in der Lage sein, Datumsformate zu verstehen. Ein Beispiel ist, dass, wenn Sie Miroslavs Code in der folgenden Datei ausführen, die Ausgabe die Zeile mit Datumsaufzeichnung druckt 28/02/14
was falsch ist.
$ cat file.txt
70202148 Sherlock Holmes: A Game of Shadows 5 28/12/14
70202148 Sherlock Holmes: A Game of Shadows 5 28/02/14
70202148 Sherlock Holmes: A Game of Shadows 5 28/12/13
70202148 Sherlock Holmes: A Game of Shadows 5 28/12/13
Anstatt Shell-Tools zu verwenden, müssen wir dafür übergeordnete Skript- / Programmiersprachen verwenden. Sie können dafür Python, Perl, Ruby oder eine andere Sprache verwenden. Unten ist ein Python
Skript, das den Job macht.
#!/usr/bin/env python3
import datetime
data = {}
for line in open('file.txt'):
line = line.strip().split()
if len(line) == 0:
continue
if line[0] not in data:
date = datetime.datetime.strptime(line.pop(-1), '%d/%m/%y')
data[line.pop(0)] = {'rating':line.pop(-1), 'year':date, 'title': ' '.join(line[1:]) }
else:
date = datetime.datetime.strptime(line.pop(-1), '%d/%m/%y')
if date > data[line[0]]['year']:
data[line.pop(0)] = {'rating':line.pop(-1), 'year':date, 'title': ' '.join(line[1:]) }
for val in sorted(data):
print('{} {} {} {}'.format(val, data[val]['title'], data[val]['rating'], data[val]['year'].strftime('%d/%m/%y')))
Ausgabe:
$ ./filter.py
70080038 Iron Man 4 18/02/14
70202148 Sherlock Holmes: A Game of Shadows 5 28/12/14