I am new to bash scripting I have the following CSV
Input
ID Location Way Day DayTime NightTime StandNo 1 abc Up mon 6.00 18.00 6
Expected Output
ID Location Way Day DayTime NightTime StandNo 1 ABC UP Mon 6.00 18.00 6
I need to check Location and Way and convert them to UpperCase – ABC, UP Day needs to be mon – Mon I need to do this for entire CSV. I need to correct the value and write all the fields on to CSV or edit the current cell and save CSV My script is as follows
file = "Myfile.csv" while IFS="," read line do output=`echo $line | cut -d "," -f2` echo $output for i in $output do if [ -z $(echo $I | sed -e "s/[a-z]//g") ] then echo $I | tr "[:lower:]" "[:upper:]" >> ".tempfile.CSV" fi done done <$file
`1. Currently this writes only the corrected value and not entire line along with corrected value. [Unsure how I can loop thru cell values in every row correct the ones which needs correction and then copy the entire row]
Any help would be useful.
Advertisement
Answer
See Why is using a shell loop to process text considered bad practice?
As question is tagged linux, assuming GNU sed is available. And also that the input is actually csv, not space/tab separated
$ cat ip.csv
ID,Location,Way,Day,DayTime,NightTime,StandNo
1,abc,Up,mon,6.00,18.00,6
2,xyz,down,TUE,2.32,5.23,4
$ sed '2,$ {s/[^,]*/Lu&/4; s/[^,]*/U&/3; s/[^,]*/U&/2}' ip.csv
ID,Location,Way,Day,DayTime,NightTime,StandNo
1,ABC,UP,Mon,6.00,18.00,6
2,XYZ,DOWN,Tue,2.32,5.23,4
2,$to process input from 2nd line to end of files/[^,]*/Lu&/4capitalize only first letter of 4th fields/[^,]*/U&/3capitalize all letters in 3rd fields/[^,]*/U&/2capitalize all letters in 2nd field
If the fields themselves can contain , within double quotes and so on, use perl, python, etc which has csv modules