awk -v m="\x0a" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'
Questo taglia ciò che è prima del campo nr., N, e stampa tutto il resto della riga, incluso il campo nr.N e mantenendo la spaziatura originale (non si riformatta). Non importa se la stringa del campo appare anche da qualche altra parte nella riga, che è il problema con la risposta di Daisaa.
Definisci una funzione:
fromField () {
awk -v m="\x0a" -v N="$1" '{$N=m$N; print substr($0,index($0,m)+1)}'
}
E usalo in questo modo:
$ echo " bat bi iru lau bost " | fromField 3
iru lau bost
$ echo " bat bi iru lau bost " | fromField 2
bi iru lau bost
L'output conserva tutto, inclusi gli spazi finali
Funziona bene per i file in cui '/ n' è il separatore di record, quindi non hai quel carattere di nuova riga all'interno delle righe. Se vuoi usarlo con altri separatori di record, usa:
awk -v m="\x01" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'
per esempio. Funziona bene con quasi tutti i file purché non utilizzino il carattere esadecimale nr. 1 all'interno delle righe.