Reputation: 79
I've the following CSV file's:
2012-07-12 15:30:09; 353.2
2012-07-12 15:45:08; 347.4
2012-07-12 16:00:08; 197.6
2012-07-12 16:15:08; 308.2
2012-07-12 16:30:09; 352.6
What I want to do is modify the value in the 2nd column...
What I already can do is extract the value and modify it this way:
#!/bin/bash
cut -d ";" -f2 $1 > .tmp.csv
for num in $(cat .tmp.csv)
do
(echo "scale=2;$num/5" | bc -l >> .tmp2.csv)
done
rm .tmp.csv
rm .tmp2.csv
But I need to have column1 in that file too...
I hope one of you can give me a hint, I'm just stuck!
Upvotes: 5
Views: 12908
Reputation: 531165
Here's an almost-pure bash
solution, without temp files:
#!/bin/bash
while IFS=$';' read col1 col2; do
echo "$col1; $(echo "scale=2;$col2/5" | bc -l)"
done
Upvotes: 3
Reputation: 54392
One way, using awk
:
awk '{ $NF = $NF/5 }1' file.txt
Results:
2012-07-12 15:30:09; 70.64
2012-07-12 15:45:08; 69.48
2012-07-12 16:00:08; 39.52
2012-07-12 16:15:08; 61.64
2012-07-12 16:30:09; 70.52
HTH
Upvotes: 3
Reputation: 2497
From your code, this is what I understood
Input
2012-07-12 15:30:09; 353.2
2012-07-12 15:45:08; 347.4
2012-07-12 16:00:08; 197.6
2012-07-12 16:15:08; 308.2
2012-07-12 16:30:09; 352.6
Awk code
awk -F ";" '{print $1 ";" $2/5}' input
Output
2012-07-12 15:30:09;70.64
2012-07-12 15:45:08;69.48
2012-07-12 16:00:08;39.52
2012-07-12 16:15:08;61.64
2012-07-12 16:30:09;70.52
Upvotes: 4
Reputation: 36262
Try with awk
:
awk '
BEGIN {
## Split fields with ";".
FS = OFS = "; "
}
{
$2 = sprintf( "%.2f", $2/5 )
print $0
}
' infile
Output:
2012-07-12 15:30:09; 70.64
2012-07-12 15:45:08; 69.48
2012-07-12 16:00:08; 39.52
2012-07-12 16:15:08; 61.64
2012-07-12 16:30:09; 70.52
Upvotes: 2