sei angenommen, eine Textdatei (file1
), die mehrere Linien von alphabetischen Zeichenketten enthält, durch eine kurze alphanumerische Zeichenfolge vorangestellt, die jeweils als Strichcode handelt. Die alphabetischen Zeichenfolgen sind alle identisch, die vorhergehenden alphanumerischen Zeichenfolgen nicht. Alphabetische und alphanumerische Zeichenfolgen sind in jeder Zeile durch ein Leerzeichen getrennt.Spaltenbereich von Textdatei über bash Werkzeug Extrahierung
$ cat file1
a1 abcdefghijklmnopqrstuvwxyz
b27 abcdefghijklmnopqrstuvwxyz
c4 abcdefghijklmnopqrstuvwxyz
Es sei angenommen, eine zweite Datei (file2
), die Informationen auf einem Spalte-Bereich enthält. Dieser Bereich ist immer kleiner als die alphabetische Zeichenfolge.
$ cat file2
2-13
Ich versuche, bash-Code zu entwickeln, der die Spaltenbereich in file2
von den alphabetischen Zeichenketten in file1
angegeben extrahiert, während die Barcodes zu halten.
$ sought_command file1 file2
a1 bcdefghijklm
b27 bcdefghijklm
c4 bcdefghijklm
Ich bin unsicher, welche bash Elektrowerkzeug in dieser Hinsicht hilfreich sein würde, aber davon ausgehen, dass awk
wird das Werkzeug sein, das dies tun könnte.
Anmerkung: Ich bin, dass Code in Python bewusst am einfachsten sein kann in Bezug auf diese Aufgabe zu schreiben, was ich auch tat. Ich fand jedoch, dass meine Python-Implementierung unangemessen langsam war, da die zu verarbeitenden alphabetischen Zeichenfolgen Zehntausende von Zeichen lang waren. Daher versuche ich bewusst, dieses Problem mit einem Bash-Tool zu lösen.
Wow! Für mich ist das Bash Power vom Feinsten. Vielen Dank für Ihre Antwort. –
Gern geschehen und danke, aber diese Antwort hat nichts mit bash zu tun. Es ist awk, ein völlig separates Tool, das von jeder UNIX-Shell (bash, ksh, csh, sh usw.) oder von Windows aufgerufen werden kann. Es ist nur bei allen UNIX-Installationen Standard. Die Verwendung von bash oder anderen Shell-Konstrukten wäre für Ihr Problem nicht geeignet - siehe [https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text- angesehen-bad-Praxis] (https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice) –
ich habe erkannt, dass Ihr Code verhält sich so, als wäre die zweite Anzahl von 'Datei2' die Länge, nicht die Stoppposition des Spaltenbereichs. Um das Problem zu beheben, habe ich versucht, den Befehl in 'awk' zu ändern. NR == FNR {start = $ 1; lgth = $ (ausdr $ 2- $ 1); next} {print $ 1, substr ($ 2, start, lgth)} 'FS =' - 'Datei2 FS =' 'Datei1'. Siehe die interne Subtraktion. Meine Änderung funktioniert jedoch nicht. Hättest du einen Vorschlag für mich? –