Ich habe eine Liste von Bereichen, und ich versuche, nachfolgende Einträge zusammenzuführen, die innerhalb einer bestimmten Entfernung voneinander liegen.Vergleichen Sie verschiedene Spalten aufeinanderfolgender Zeilen, um Bereiche zu verschmelzen
In meinen Daten enthält die erste Spalte die untere Grenze des Bereichs und die zweite Spalte die obere Grenze.
Die Logik folgt: Wenn der Wert in Spalte 1 kleiner oder gleich dem Wert in Spalte 2 der vorherigen Zeile plus einem bestimmten Wert ist, drucken Sie den Eintrag in Spalte 1 der vorherigen Zeile und den Eintrag in Spalte 2 von gegebene Reihe.
Wenn die beiden Bereiche innerhalb der durch die Variable 'dist' angegebenen Entfernung liegen, sollten sie zusammengeführt werden, andernfalls sollten die Zeilen so gedruckt werden, wie sie sind.
Input:
1 10
9 19
51 60
if dist=10, Desired output:
1 19
51 60
bash verwenden, habe ich versucht, die Dinge in diese Richtung:
dist=10
awk '$1 -le (p + ${dist}) { print q, $2 } {p=$2;} {q=$1} ' input.txt > output.txt
Dies gibt Syntaxfehler.
Jede Hilfe wird geschätzt!
kurzer Kommentar: Sie nicht 'bash' Syntax verwenden können in' awk' sie völlig verschiedene Dinge sind ... Gebrauch '<' , '<=', etc. zum Vergleich – Sundeep
siehe https://stackoverflow.com/questions/19075671/how-doi-i-use-shell-variables-in-an-awk-script zum Übergeben von Shell-Variablen an awk – Sundeep
awk ist keine Shell. Es ist ein komplett anderes Werkzeug mit eigener Syntax, Semantik und Umfang. Holen Sie sich Effective Awk Programming, 4. Edition, von Arnold Robbins, um zu lernen, wie man awk-Programme schreibt. –