awk -v m="\x0a" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'
Dies zerhackt, was vor dem angegebenen Feld nr., N steht, und druckt den gesamten Rest der Zeile, einschließlich Feld nr.N, und behält den ursprünglichen Abstand bei (es wird nicht neu formatiert). Es spielt keine Rolle, ob die Zeichenfolge des Feldes auch an einer anderen Stelle in der Zeile angezeigt wird, was das Problem mit Daisaas Antwort ist.
Definieren Sie eine Funktion:
fromField () {
awk -v m="\x0a" -v N="$1" '{$N=m$N; print substr($0,index($0,m)+1)}'
}
Und benutze es so:
$ echo " bat bi iru lau bost " | fromField 3
iru lau bost
$ echo " bat bi iru lau bost " | fromField 2
bi iru lau bost
Die Ausgabe behält alles bei, einschließlich nachfolgender Leerzeichen
Funktioniert gut für Dateien, in denen '/ n' das Datensatztrennzeichen ist, sodass Sie das Zeichen für neue Zeilen nicht in den Zeilen haben. Wenn Sie es mit anderen Datensatztrennzeichen verwenden möchten, verwenden Sie:
awk -v m="\x01" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'
beispielsweise. Funktioniert gut mit fast allen Dateien, solange sie kein hexadezimales Zeichen nr verwenden. 1 innerhalb der Zeilen.