awk -v m="\x01" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'
Cela coupe ce qui est avant le champ nr., N donné et imprime tout le reste de la ligne, y compris le champ nrN et en conservant l'espacement d'origine (il ne reformate pas). Cela n'a pas d'importance si la chaîne du champ apparaît également ailleurs dans la ligne, ce qui est le problème avec la réponse d'Ascherer.
Définissez une fonction:
fromField () {
awk -v m="\x01" -v N="$1" '{$N=m$N; print substr($0,index($0,m)+1)}'
}
Et utilisez-le comme ceci:
$ echo " bat bi iru lau bost " | fromField 3
iru lau bost
$ echo " bat bi iru lau bost " | fromField 2
bi iru lau bost
La sortie conserve tout, y compris les espaces de fin Pour N = 0, elle renvoie la ligne entière, telle quelle, et pour n> NF la chaîne vide