awk -v m="\x0a" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'
Cela coupe ce qui se trouve avant le champ nr., N 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 de daisaa.
Définissez une fonction:
fromField () {
awk -v m="\x0a" -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
Fonctionne bien pour les fichiers où «/ n» est le séparateur d'enregistrement afin que vous n'ayez pas ce caractère de nouvelle ligne à l'intérieur des lignes. Si vous souhaitez l'utiliser avec d'autres séparateurs d'enregistrement, utilisez:
awk -v m="\x01" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'
par exemple. Fonctionne bien avec presque tous les fichiers tant qu'ils n'utilisent pas de caractères hexadécimaux. 1 à l'intérieur des lignes.