Question Comment puis-je inverser l'ordre des lignes dans un fichier?


Je voudrais inverser l'ordre des lignes dans un fichier texte (ou stdin), en préservant le contenu de chaque ligne.

Donc, à commencer par:

foo
bar
baz

Je voudrais finir avec

baz
bar
foo

Existe-t-il un utilitaire de ligne de commande UNIX standard pour cela?


489
2018-04-12 21:34


origine


Réponses:


Queue BSD:

tail -r myfile.txt

Référence: FreeBSD, NetBSD, OpenBSD et OS X pages de manuel.


344
2018-04-12 21:36



À noter également: tac (le, ahem, inverse de cat). Partie de coreutils.

Retourner un fichier dans un autre

tac a.txt > b.txt

1163
2018-04-12 21:44



Il y a le des astuces bien connues:

# reverse order of lines (emulates "tac")
# bug/feature in HHsed v1.5 causes blank lines to be deleted
sed '1!G;h;$!d'               # method 1
sed -n '1!G;h;$p'             # method 2

(Explication: ajouter une ligne non initiale pour stocker le tampon, intervertir la ligne et mettre en attente le tampon, imprimer la ligne à la fin)

Alternativement (avec une exécution plus rapide) des awk one-liners:

awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' file*

Si vous ne pouvez pas vous en souvenir,

perl -e 'print reverse <>'

Sur un système avec des utilitaires GNU, les autres réponses sont plus simples, mais tout le monde n’est pas GNU / Linux ...


131
2018-04-13 14:36



Si vous êtes en vim utilisation

:g/^/m0

52
2017-11-29 14:27



$ (tac 2> /dev/null || tail -r)

Essayer tac, qui fonctionne sous Linux, et si cela ne fonctionne pas, utilisez tail -r, qui fonctionne sur BSD et OSX.


37
2017-12-13 20:25



tac <file_name>

Exemple:

$ cat file1.txt
1
2
3
4
5

$ tac file1.txt
5
4
3
2
1

30
2017-07-20 04:39



Essayez la commande suivante:

grep -n "" myfile.txt | sort -r -n | gawk -F : "{ print $2 }"

22
2018-05-06 18:35



Just Bash :) (4.0+)

function print_reversed {
    local lines i
    readarray -t lines

    for (( i = ${#lines[@]}; i--; )); do
        printf '%s\n' "${lines[i]}"
    done
}

print_reversed < file

15
2017-09-15 16:56



La méthode la plus simple consiste à utiliser le tac commander. tac est catest inverse. Exemple:

$ cat order.txt
roger shah 
armin van buuren
fpga vhdl arduino c++ java gridgain
$ tac order.txt > inverted_file.txt
$ cat inverted_file.txt
fpga vhdl arduino c++ java gridgain
armin van buuren
roger shah 

12
2018-01-20 17:33



J'aime vraiment le "queue -r"Réponse, mais ma réponse préférée gawk est ....

gawk '{ L[n++] = $0 } 
  END { while(n--) 
        print L[n] }' file

10
2017-10-08 03:11