Si consideri il seguente comando:C'è un modo per cancellare completamente i campi in awk, in modo che i delimitatori extra non vengano stampati?
gawk -F"\t" "BEGIN{OFS=\"\t\"}{$2=$3=\"\"; print $0}" Input.tsv
Quando ho creato $ 2 = $ 3 = "", l'effetto desiderato per ottenere lo stesso effetto di scrittura:
print $1,$4,$5...$NF
Tuttavia, ciò che in realtà accade è che ho ottenere due campi vuoti, con i delimitatori di campo aggiuntivi ancora in stampa.
È possibile eliminare effettivamente $ 2 e $ 3?
Nota: se questo era su Linux in bash
, l'istruzione corretta sopra sarebbe la seguente, ma Windows non gestisce le virgolette singole in cmd.exe
.
gawk -F'\t' 'BEGIN{OFS="\t"}{$2=$3=""; print $0}' Input.tsv
Si dovrebbe utilizzare le virgolette singole per il set esterno, allora non c'è bisogno di fuggire i doppi apici all'interno dello script. Se si utilizzano le virgolette doppie per il set esterno in modo da poter incorporare le variabili di shell, utilizzare '-v' per eseguire il passaggio di variabili. –
Sto usando awk in Windows. Cmd.exe non funziona bene con le virgolette singole per qualche motivo. – merlin2011
L'ho fatto più di 10 anni fa (credo). prova a fare un '$ 2 = $ 3 =" "; $ 0 = $ 0'. In bocca al lupo. – shellter