Domanda

Voglio aggiungere uno a l'ultimo valore al termine di una stringa in sed. Sto pensando lungo le linee di

cat 0809_data.csv |sed -e 's/\([0-9]\{6\}\).*\(,[^,]*$\)/\1\2/g'| export YEARS = $(echo `grep -o '[^,]*$' + 1`|bc)

es. 123456, kjhsflk, lksjgrlks, 2.8 -> 123456, 3.8

Questo sarebbe più ragionevole / fattibile in awk?

È stato utile?

Soluzione

Questo dovrebbe funzionare:

years=$(awk -F, 'BEGIN{ OFS=", "} {print $1, $4+1}' 0809_data.csv)

Sarebbe davvero imbarazzante per cercare di utilizzare sed e far di conto con una parte del risultato. Avresti per tirare la corda a parte e fare la matematica e mettere tutto insieme. AWK fa che ordinatamente senza tante storie.

Si noti che cat non è necessaria (anche utilizzando sed in un comando simile a quello in questione) e probabilmente non è necessario esportare la variabile a meno che non si sta chiamando un altro script e hanno bisogno di essere in grado di accedere come una variabile "globale". Inoltre, conchiglie in generale fare numeri in virgola fissa in modo che non è necessario l'uso bc a meno che non hai bisogno di carri allegorici.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top