100 Sprachverarbeitungsklopfen http://www.cl.ecei.tohoku.ac.jp/nlp100/ Aus Kapitel 2 10 bis 19
Zählen Sie die Anzahl der Zeilen. Verwenden Sie zur Bestätigung den Befehl wc.
Bash
$ wc -l hightemp.txt
Python
print(len(open('hightemp.txt').readlines()))
Ersetzen Sie jede Registerkarte durch ein Leerzeichen. Verwenden Sie zur Bestätigung den Befehl sed, den Befehl tr oder den Befehl expand.
Bash
$ sed 's/\t/ /g' hightemp.txt
Python
r = open('hightemp.txt').readlines()
print(''.join([l.replace('\t', ' ') for l in r]))
Was du kommentiert hast
print(open('hightemp.txt').read().replace('\t', ' '))
Speichern Sie nur die erste Spalte jeder Zeile als col1.txt und die zweite Spalte als col2.txt. Verwenden Sie zur Bestätigung den Befehl cut.
Bash
$ cut -f 1 hightemp.txt > col1.txt
$ cut -f 2 hightemp.txt > col2.txt
Python
r = open('hightemp.txt').readlines()
with open('col1.txt', 'w') as c1, open('col2.txt', 'w') as c2:
for l in r:
s = l.split('\t')
c1.write(s[0]+'\n')
c2.write(s[1]+'\n')
Kombinieren Sie die in 12 erstellten Spalten col1.txt und col2.txt und erstellen Sie eine Textdatei, in der die erste und die zweite Spalte der Originaldatei durch Tabulatortrennzeichen angeordnet sind. Verwenden Sie zur Bestätigung den Befehl Einfügen.
Bash
$ paste col1.txt col2.txt
Python
c1 = open('col1.txt').readlines()
c2 = open('col2.txt').readlines()
for s1, s2 in zip(c1, c2):
print(s1.rstrip() + '\t' + s2.rstrip())
Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die ersten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl head.
Bash
$ head -n 5 hightemp.txt
Python
import sys
n = int(sys.argv[1])
r = open('hightemp.txt').readlines()
print(''.join(r[:n]))
Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die letzten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl tail.
Bash
$ tail -n 5 hightemp.txt
Python
import sys
n = int(sys.argv[1])
r = open('hightemp.txt').readlines()
print(''.join(r[-n:]))
Empfangen Sie die natürliche Zahl N mithilfe von Befehlszeilenargumenten und teilen Sie die Eingabedatei zeilenweise in N. Erzielen Sie die gleiche Verarbeitung mit dem Befehl split.
Bash
$ split -l 5 hightemp.txt
Python
import sys
import math
n = int(sys.argv[1])
r = open('hightemp.txt').readlines()
for i in range(n):
l = math.ceil((len(r)+1) / n)
with open('split0' + str(i) + '.txt', 'w') as f:
f.write(''.join(r[l*i:l*i+l-1]))
Suchen Sie den Typ der Zeichenfolge in der ersten Spalte (eine Reihe verschiedener Zeichenfolgen). Verwenden Sie zur Bestätigung die Befehle sort und uniq.
Bash
$ cut -f 1 hightemp.txt | sort | uniq
Python
r = open('hightemp.txt').readlines()
print('\n'.join(set((x.split('\t')[0] for x in r))))
Ordnen Sie jede Zeile in umgekehrter Reihenfolge der Zahlen in der dritten Spalte an (Hinweis: Ordnen Sie den Inhalt jeder Zeile neu an, ohne ihn zu ändern). Verwenden Sie den Befehl sort zur Bestätigung (dieses Problem muss nicht mit dem Ergebnis der Ausführung des Befehls übereinstimmen).
Bash
$ sort -r -n -k 3,3 hightemp.txt
Python
r = open('hightemp.txt').readlines()
r.sort(key=lambda x: x.split('\t')[2], reverse=True)
print(''.join(r))
Ermitteln Sie die Häufigkeit des Auftretens der ersten Spalte jeder Zeile und zeigen Sie sie in absteigender Reihenfolge an. Verwenden Sie zur Bestätigung die Befehle cut, uniq, sort
Bash
$ cut -f 1 hightemp.txt | sort | uniq -c | sort -r
Python
r = open('hightemp.txt').readlines()
r = list(map(lambda s: s.split()[0], r))
c = {s: r.count(s) for s in r}
c = sorted(c.items(), key=lambda x: x[1], reverse=True)
print('\n'.join(map(lambda s: str(s[1]) + ' ' + s[0], c)))
Was du kommentiert hast
r = [s.split('\t')[0] for s in open('hightemp.txt')]
c = {k:r.count(k) for k in r}
s = sorted(c, key=lambda k:c[k], reverse=True)
print('\n'.join(str(c[k])+' '+k for k in s))
Recommended Posts