GNU/Linux >> Linux Esercitazione >  >> Linux

Inversione del contenuto di una variabile tramite parole

Sui sistemi GNU, il contrario di cat è tac:

$ tac -s" " <<< "$VAR "            # Please note the added final space.
100 90 80 70 60 50 40 30 20 10

Per un breve elenco, e in una variabile, la shell stessa è la soluzione più veloce:

var="10 20 30 40 50 60 70 80 90 100"
set -- $var; unset a 
for ((i=$#;i>0;i--)); do
    printf '%s%s' "${a:+ }" "${!i}"
    a=1
done
echo

Uscita:

100 90 80 70 60 50 40 30 20 10 

Nota:l'operazione di divisione in set -- $var è sicuro per la stringa esatta usata qui, ma non lo sarà se la stringa contiene caratteri jolly (* , ? o [] ). Può essere evitato con set -f prima della scissione, se necessario. La stessa nota vale anche per le soluzioni successive (tranne dove indicato).

Oppure, se vuoi impostare qualche altra variabile con l'elenco inverso:

var="10 20 30 40 50 60 70 80 90 100"
set -- $var
for i; do out="$i${out:+ }$out"; done
echo "$out"

O utilizzando solo i parametri posizionali.

var="10 20 30 40 50 60 70 80 90 100"
set -- $var
a=''
for    i
do     set -- "$i${a:+ [email protected]}"
       a=1
done
echo "$1"

O usando solo una variabile (che può essere var stessa):
Nota:questa soluzione non è influenzata dal globing né da IFS.

var="10 20 30 40 50 60 70 80 90 100"

a=" $var"
while [[ $a ]]; do
    printf '<%s>' "${a##* }"
    var="${a% *}"
done

awk in soccorso

$ var='10 20 30 40 50 60 70 80 90 100'

$ echo "$var" | awk '{for(i=NF; i>0; i--) printf i==1 ? $i"\n" : $i" "}'
100 90 80 70 60 50 40 30 20 10


con perl , courtesy Come leggere un indirizzo IP al contrario? condiviso da @steeldriver

$ echo "$var" | perl -lane '$,=" "; print reverse @F'
100 90 80 70 60 50 40 30 20 10


Oppure, con bash stesso convertendo la stringa in array

$ arr=($var)    
$ for ((i=${#arr[@]}-1; i>=0; i--)); do printf "${arr[i]} "; done; echo
100 90 80 70 60 50 40 30 20 10 

Linux
  1. Bash Dynamic (variabile) Nomi di variabili?

  2. Trova N parole più frequenti in un file?

  3. Variabile esterna in Awk?

  4. Elementi separati delle parole Camelcase?

  5. Usare _roff per sottolineare le parole?

Variabile di esportazione Bash

Come installare Maven su Windows

Come impostare la variabile d'ambiente in Bash

Che cos'è Subshell in Linux?

Alias ​​con variabile in bash

bash - corrispondenza senza distinzione tra maiuscole e minuscole della variabile