una linea utilizzando sed e BC insieme?
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?
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.