鱼C论坛

 找回密码
 立即注册
查看: 1607|回复: 4

[已解决]关于bash语言对csv文件的修改

[复制链接]
发表于 2021-11-30 05:29:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
root@8b44b1b5215b:/# head -n 20 /bashdm.csv
INDEX-Name-Age-Country-Height-Hair_Colour-YLA-CONF
0-#]Jeanne Wallace-86-CODE:MY-157-White-1-YES
1-#]Anthony Gentry-49-CODE:QA-162-Black-1-YES
2-#]Marcia Jones-75-CODE:IE-186-Dyed-1-YES
3-"#]James Patch-Walker-Willis"-18-CODE:KI-166-Ginger-1-YES
4-#]Vickie White-42-CODE:CO-160-Blonde-1-YES
5-#]Dwayne Peterson-70-CODE:UZ-142-Dyed-1-YES
6-#]Rose Rubottom-79-CODE:PL-141-White-1-YES
7-#]Thomas Salas-30-CODE:ML-156-Black-1-YES
8-#]Xiao Uong-41-CODE:AD-159-Blonde-1-YES
9-#]Lakisha Stewart-48-CODE:CF-182-Blonde-1-YES
10-#]Claire Nunes-43-CODE:SN-171-Black-1-YES
11-#]Cheryl Person-73-CODE:CU-155-Blonde-1-YES


已知csv文件头20行如上
如何通过bash语言将Name前面的#] 去除掉并保存新的csv文件呢?
注意第三行开头还有一个”

谢谢大家
最佳答案
2021-11-30 11:58:54
本帖最后由 jackz007 于 2021-11-30 15:45 编辑

        假定 csv 文件是当前目录下的 "data.csv",bash 脚本文件是当前目录下的 "x"
  1. #!/bin/bash
  2. while read -r line
  3. do
  4.     while [[ ${line} =~ "\"" ]]
  5.     do
  6.         line=${line%%\"*}${line#*\"}
  7.     done
  8.     if [[ ${line} =~ "#]" ]]
  9.     then
  10.         line=${line%%#]*}${line#*#]}
  11.     fi
  12.     echo ${line}
  13. done < data.csv
复制代码

这样用
  1. chmod u+x x
  2. ./x > data2.csv
复制代码

        这样,当前目录下新产生的文件 "data2.csv" 中就会有处理结果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-30 11:21:45 | 显示全部楼层
  1. $ cat bashdm.csv
  2. INDEX-Name-Age-Country-Height-Hair_Colour-YLA-CONF
  3. 0-#]Jeanne Wallace-86-CODE:MY-157-White-1-YES
  4. 1-#]Anthony Gentry-49-CODE:QA-162-Black-1-YES
  5. 2-#]Marcia Jones-75-CODE:IE-186-Dyed-1-YES
  6. 3-"#]James Patch-Walker-Willis"-18-CODE:KI-166-Ginger-1-YES
  7. 4-#]Vickie White-42-CODE:CO-160-Blonde-1-YES
  8. 5-#]Dwayne Peterson-70-CODE:UZ-142-Dyed-1-YES
  9. 6-#]Rose Rubottom-79-CODE:PL-141-White-1-YES
  10. 7-#]Thomas Salas-30-CODE:ML-156-Black-1-YES
  11. 8-#]Xiao Uong-41-CODE:AD-159-Blonde-1-YES
  12. 9-#]Lakisha Stewart-48-CODE:CF-182-Blonde-1-YES
  13. 10-#]Claire Nunes-43-CODE:SN-171-Black-1-YES
  14. 11-#]Cheryl Person-73-CODE:CU-155-Blonde-1-YES
  15. $ sed -r 's/^.*?#]//' bashdm.csv
  16. INDEX-Name-Age-Country-Height-Hair_Colour-YLA-CONF
  17. Jeanne Wallace-86-CODE:MY-157-White-1-YES
  18. Anthony Gentry-49-CODE:QA-162-Black-1-YES
  19. Marcia Jones-75-CODE:IE-186-Dyed-1-YES
  20. James Patch-Walker-Willis"-18-CODE:KI-166-Ginger-1-YES
  21. Vickie White-42-CODE:CO-160-Blonde-1-YES
  22. Dwayne Peterson-70-CODE:UZ-142-Dyed-1-YES
  23. Rose Rubottom-79-CODE:PL-141-White-1-YES
  24. Thomas Salas-30-CODE:ML-156-Black-1-YES
  25. Xiao Uong-41-CODE:AD-159-Blonde-1-YES
  26. Lakisha Stewart-48-CODE:CF-182-Blonde-1-YES
  27. Claire Nunes-43-CODE:SN-171-Black-1-YES
  28. Cheryl Person-73-CODE:CU-155-Blonde-1-YES
  29. $ sed -r 's/^.*?#]//' bashdm.csv > new.csv
  30. $ cat new.csv
  31. INDEX-Name-Age-Country-Height-Hair_Colour-YLA-CONF
  32. Jeanne Wallace-86-CODE:MY-157-White-1-YES
  33. Anthony Gentry-49-CODE:QA-162-Black-1-YES
  34. Marcia Jones-75-CODE:IE-186-Dyed-1-YES
  35. James Patch-Walker-Willis"-18-CODE:KI-166-Ginger-1-YES
  36. Vickie White-42-CODE:CO-160-Blonde-1-YES
  37. Dwayne Peterson-70-CODE:UZ-142-Dyed-1-YES
  38. Rose Rubottom-79-CODE:PL-141-White-1-YES
  39. Thomas Salas-30-CODE:ML-156-Black-1-YES
  40. Xiao Uong-41-CODE:AD-159-Blonde-1-YES
  41. Lakisha Stewart-48-CODE:CF-182-Blonde-1-YES
  42. Claire Nunes-43-CODE:SN-171-Black-1-YES
  43. Cheryl Person-73-CODE:CU-155-Blonde-1-YES
  44. $
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-30 11:58:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-11-30 15:45 编辑

        假定 csv 文件是当前目录下的 "data.csv",bash 脚本文件是当前目录下的 "x"
  1. #!/bin/bash
  2. while read -r line
  3. do
  4.     while [[ ${line} =~ "\"" ]]
  5.     do
  6.         line=${line%%\"*}${line#*\"}
  7.     done
  8.     if [[ ${line} =~ "#]" ]]
  9.     then
  10.         line=${line%%#]*}${line#*#]}
  11.     fi
  12.     echo ${line}
  13. done < data.csv
复制代码

这样用
  1. chmod u+x x
  2. ./x > data2.csv
复制代码

        这样,当前目录下新产生的文件 "data2.csv" 中就会有处理结果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-11-30 23:44:07 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-30 23:44:39 | 显示全部楼层
jackz007 发表于 2021-11-30 11:58
假定 csv 文件是当前目录下的 "data.csv",bash 脚本文件是当前目录下的 "x"

这样用

感谢感谢,学到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-9 03:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表