我是 bash 脚本的新手 我有以下 CSV
输入
ID Location Way Day DayTime NightTime StandNo
1 abc Up mon 6.00 18.00 6
预期输出
ID Location Way Day DayTime NightTime StandNo
1 ABC UP Mon 6.00 18.00 6
我需要检查 Location 和 Way 并将它们转换为 UpperCase - ABC, UP 一天必须是周一 - 周一 我需要为整个 CSV 执行此操作。我需要更正值并将所有字段写入 CSV 或编辑当前单元格并保存 CSV 我的脚本如下
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。目前这只写更正值而不是整行连同更正值。 [不确定如何遍历每行中的单元格值更正需要更正的值,然后复制整行]
任何帮助都是有用的。
最佳答案
参见 Why is using a shell loop to process text considered bad practice?
由于问题被标记为 linux
,假设 GNU sed
可用。而且输入实际上是 csv
,而不是空格/制表符分隔
$ 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/[^,]*/\L\u&/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,$
处理从第二行到文件末尾的输入s/[^,]*/\L\u&/4
只将第 4 个字段的首字母大写s/[^,]*/\U&/3
将第 3 个字段中的所有字母大写s/[^,]*/\U&/2
将第二个字段中的所有字母大写
如果字段本身可以在双引号内包含 、
等等,请使用 perl
、python
等具有 csv 的
模块
关于linux - Bash:解析 CSV 并编辑单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45003016/