Come stampare l'ennesima colonna di un file di testo con AWK usando argv
Domanda
Supponiamo di avere un file di testo con dati separati da spazi bianchi in colonne. Voglio scrivere uno script di shell che prende come input un nome file e un numero N e stampa solo quella colonna. Con awk posso fare quanto segue:
awk < /tmp/in '{print $2}' > /tmp/out
Questo codice stampa la seconda colonna.
Ma come si potrebbe avvolgerlo in uno script di shell in modo che una colonna arbitraria possa essere passata in argv?
Soluzione
awk -v x=2 '{print $x}'
o in uno script di shell:
#!/bin/sh num=$1 awk < /tmp/in -v x=$num '{print $x}' > /tmp/out
Altri suggerimenti
awk '{print
Dove $ myvar è la colonna della variabile (un numero intero). Fai attenzione alle iniezioni di script!
$myvar'}' < /tmp/in > /tmp/out
Dove $ myvar è la colonna della variabile (un numero intero). Fai attenzione alle iniezioni di script!
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow