[英]Bash: Parse CSV and edit cell values
我是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
我需要檢查“位置和方式”並將其轉換為UpperCase-ABC,UP Day需要是mon-Mon我需要針對整個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。 當前,這僅將校正后的值寫入,而不會寫入整行。 [不確定如何遍歷每一行中的單元格值來糾正需要糾正的值,然后復制整行]
任何幫助將是有用的。
問題被標記為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\u0026amp;/4
僅將第4個字段的首字母大寫 s/[^,]*/\\U&/3
第三個字段中的所有字母大寫 s/[^,]*/\\U&/2
第二個字段中的所有字母大寫 如果字段本身可以包含,
雙引號引起等等,請使用具有csv
模塊的perl
, python
等
回想一下bash,您有一個參數擴展 ,它將參數 (例如$line
)中的所有字符轉換為大寫 。 擴展形式為${line^^}
(請注意'^^'
)。 要讀取第一個字符后的所有字符並將其轉換為大寫,可以執行以下操作:
declare -i c=0
while read -r line; do
if [ "$c" -gt '0' ]; then
echo "${line^^}" ## output line converted to upper
else
echo "$line"
fi
((c++))
done < file.txt
示例輸出
$ declare -i c=0; while read -r line; do if [ "$c" -gt '0' ]; then \
echo "${line^^}"; else echo "$line"; fi; ((c++)); done < file.txt
ID Location Way Day DayTime NightTime StandNo
1 ABC UP MON 6.00 18.00 6
我假設您在輸入中包含無標題的CSV文件:
$ cat file.csv
1,abc,Up,mon,6.00,18.00,6
我還假設您要在輸出中使用CSV文件。
如果所有這些假設都是正確的,則:
$ awk -F, -v OFS=, '{$2=toupper($2); $4=toupper(substr($4,1,1)) substr($4,2); print}' file.csv
1,ABC,Up,Mon,6.00,18.00,6
編輯 。 如果您想保留標題行...
awk -F, -v OFS=, '{if(NR>1){$2=toupper($2); $4=toupper(substr($4,1,1)) substr($4,2)} print}' file.csv
ID,Location,Way,Day,DayTime,NightTime,StandNo
1,ABC,Up,Mon,6.00,18.00,6
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.