Shell-Skript einen Teil einer Zeichenfolge zu lesen und drucken
Frage
Guten Tag Mitglieder,
Ich habe eine Eingabedatei, die Reihen von numerischen Ziffern (fast 2000 Zeilen) hat ich will „den zweiter auf die acht Stelle von rechts“ extrahieren, aus jeder Zeile der Ziffernfolge in eine separate Datei, mit der Ergebnis durch ein Komma getrennt, wie gezeigt.
Beispiel: input.txt
00000000000001303275310752
00000000000001827380519015
00000000000000800081610361
00000000000000449481894004
00000000000000449481894004
00000000000001812612607514
Erwartetes Ergebnis: newfile.txt
7531075,
8051901,
8161036,
8189400,
8189400,
1260751,
Ich vermute, so etwas wie ‚sed‘ kann verwendet werden, um mein Problem zu lösen, aber ich bin mir nicht ganz sicher, wie dies zu erreichen, zu gehen. Ich bin verbunden mit einer Maschine läuft auf Solaris 5.10 freuen, wenn mich jemand mit einer kurzen Erklärung führen kann.
Grüße,
Anfänger.
Lösung
Für feste Breite Eingang, versuchen Sie:
cut -c19-26 input.txt | sed 's/$/,/'
was zu sagen ist, das 19. bis 26. Charakter des Eingangs txt extrahieren und ersetzen Sie dann das Ende der Zeile mit einem Komma.
Wenn Sie mit variabler Länge Linien haben, werden Sie etwas anderes brauchen.
Andere Tipps
Sie können die führenden Nullen mit gestutzt:
sed 's/^0*//g'
So etwas wie:
sed 's/^0*//g' input.txt | sed 's/$/,/'
sollte funktionieren.
Versuchen:
perl -pe 's/^.*(\d{7})\d$/$1,/' < input.txt
Oder wenn Sie nicht regulären Ausdrücke mögen:
perl -pe '$_ = substr($_,-9,-2) . ",\n"' < input.txt
Dies ist für jede feste oder variable Länge Linie arbeiten.
Hier ist eine Lösung in Python ist, sollte es intuitiv:
$ cat data2
00000000000001303275310752
00000000000001827380519015
00000000000000800081610361
00000000000000449481894004
00000000000000449481894004
00000000000001812612607514
$ cat digits.py
import sys
for line in sys.stdin:
print '%s,' % (line[-9:-2])
$ python digits.py < data2
7531075,
8051901,
8161036,
8189400,
8189400,
1260751,