L'input backslash del terminale viene ripetuto in uscita

2

Sto usando zsh su un MacBook Pro, OS X 10.10. Quando scrivo alcuni comandi, come questo:

cat myfile | awk -F $'\t' '{print $8, $9}' | sort | uniq -c | sort -k1,1n | awk '{if ($1 > 50) sum += $1} END {print sum}'

, quindi parte del comando viene ripetuta prima dell'effettivo output del comando. L'output in questo caso è simile a:

    " '{print $8, $9}' | sort | uniq -c | sort -k1,1n | awk '{if ($1 > 50) sum += $1} END {print sum}' : myusername2525

Qualcuno sa come ottenere l'uscita confusa? Sembra quasi una vulnerabilità legata alle stringhe di formato o qualcosa di simile a me.

    
posta Hinton 19.05.2015 - 07:47
fonte

1 risposta

2

Il problema è il $ nella prima istruzione awk nella catena:

awk -F $'\t' '{print $8, $9}'

L'opzione -F per awk imposta il separatore di record per il tuo input. Se ti aspetti davvero che il separatore sia un segno di dollaro seguito da un carattere di tabulazione, devi spostare il simbolo del dollaro nelle singole virgolette in questo modo:

awk -F '$\t' '{print $8, $9}'

Lasciare il $ all'esterno delle virgolette singole significa che è interpretato dalla shell come riferimento di variabile. Questo è ciò che sta portando al tuo strano output. Se non ti aspetti un segno di dollaro nel separatore di campo, solo una scheda, modifica la chiamata di awk a:

awk -F '\t' '{print $8, $9}'

In base a ciò che hai detto, quanto sopra sembra essere quello che vuoi.

    
risposta data 19.05.2015 - 18:22
fonte

Leggi altre domande sui tag