Je suppose que beaucoup de gens entrent dans cette question à la recherche d'un moyen d'éviter la nouvelle ligne awk
. Ainsi, je vais proposer une solution à cela, puisque la réponse au contexte spécifique était déjà résolue!
Dans awk
, print
insère automatiquement un ORS
après l'impression. ORS
signifie "séparateur d'enregistrements de sortie" et utilise par défaut la nouvelle ligne. Ainsi, chaque fois que vous dites print "hi"
awk imprime "hi" + nouvelle ligne.
Cela peut être modifié de deux manières différentes: en utilisant un fichier vide ORS
ou en utilisant printf
.
Utiliser un vide ORS
awk -v ORS= '1' <<< "hello
man"
Cela renvoie "helloman", tous ensemble.
Le problème ici est que tous les awks n'acceptent pas de définir un vide ORS
, vous devez donc probablement définir un autre séparateur d'enregistrement.
awk -v ORS="-" '{print ...}' file
Par exemple:
awk -v ORS="-" '1' <<< "hello
man"
Renvoie "hello-man-".
Utilisation printf
(préférable)
Bien que print
joint ORS
après l'enregistrement, printf
ne le fait pas. Ainsi, printf "hello"
imprime simplement "bonjour", rien d'autre.
$ awk 'BEGIN{print "hello"; print "bye"}'
hello
bye
$ awk 'BEGIN{printf "hello"; printf "bye"}'
hellobye
Enfin, notez qu'en général, cela manque une nouvelle ligne finale, de sorte que l'invite du shell sera dans la même ligne que la dernière ligne de la sortie. Pour nettoyer cela, utilisez END {print ""}
pour qu'une nouvelle ligne soit imprimée après tout le traitement.
$ seq 5 | awk '{printf "%s", $0}'
12345$
# ^ prompt here
$ seq 5 | awk '{printf "%s", $0} END {print ""}'
12345
printf
interprète%s
donc utiliserprintf "%s" whatever
au lieu deprintf whatever
.