Bash脚本检查文件最后一列中的字符串并将其转换为整数

Bash脚本检查文件最后一列中的字符串并将其转换为整数,bash,shell,Bash,Shell,我有一个逗号分隔的文本文件示例,如下所示: 9ZJ,Name 1,Not Covered,Home Furniture & Decor,Consumer Cyclical,104.0g H3L,H3llo name,Stopped Coverage,Software - Code,Services,177.0g ABA,Another name here,Not Covered,Farm - Rural - Country,Farm Services,223.6g ABC,ABC Nam

我有一个逗号分隔的文本文件示例,如下所示:

9ZJ,Name 1,Not Covered,Home Furniture & Decor,Consumer Cyclical,104.0g
H3L,H3llo name,Stopped Coverage,Software - Code,Services,177.0g
ABA,Another name here,Not Covered,Farm - Rural - Country,Farm Services,223.6g
ABC,ABC Name there,4-star Coverage,Home,Bricks & motar,1.9Meg
ABD,Abacus Name Number 1,3-star Coverage,Maths - Science,Further study,2.6Meg

我想检查最后一列中的字符串,如果字符串以“g”结尾,那么我想操纵字符串并将其转换为整数,基本上从最后一列中的字符串中去掉“g”并将其乘以10,例如223.6g变为2236。如果字符串以“Meg”结尾,那么我想操纵字符串并将其转换为整数,基本上从最后一列中的字符串中剥离“Meg”,并将其乘以1000,例如,1.9Meg变为1900。如何在bash脚本中执行此字符串操作?

使用awk。根据需要调整

za:tmp za$ cat /tmp/file.txt 
9ZJ,Name 1,Not Covered,Home Furniture & Decor,Consumer Cyclical,104.0g
H3L,H3llo name,Stopped Coverage,Software - Code,Services,177.0g
ABA,Another name here,Not Covered,Farm - Rural - Country,Farm Services,223.6g
ABC,ABC Name there,4-star Coverage,Home,Bricks & motar,1.9Meg
ABD,Abacus Name Number 1,3-star Coverage,Maths - Science,Further study,2.6Meg

za:tmp za$ awk -F, '$(NF) ~ /g/ {print $(NF) * 10 }' </tmp/file.txt 
1040
1770
2236
19
26
za:tmp za$cat/tmp/file.txt
9ZJ,名称1,未涵盖,家用家具和装饰,消费者周期性,104.0g
H3L,H3llo名称,停止覆盖,软件代码,服务,177.0g
ABA,这里的另一个名字,未涵盖,农场-农村-国家,农场服务,223.6g
ABC,ABC名称,四星级覆盖率,房屋,砖块和马达,1.9兆欧
ABD,算盘名称编号1,三星覆盖率,数学-科学,进修,2.6Meg

za:tmpza$awk-F,'$(NF)~/g/{print$(NF)*10}'向我们展示您到目前为止为bash脚本所做的工作。你特别需要什么帮助?把它拆成碎片。你知道如何(1)循环文件的每一行吗?(2) 是否拉出CSV文件的最后一列?(3) 检查字符串是否有特定的后缀?(4) 去掉后缀?(5) 乘浮点数?如果你告诉我们你的困境,我们可以帮你解决任何问题。@JohnKugelman很好的解释:)感谢zee提供的入门技巧,真的很感激(有时候我们只需要一点积极的方向/技巧就可以开始了,不像上面的John Kugelman用户必须很讨厌)。因此,代码如下所示;awk-F,“{if($(NF)~/g/{print$(NF)*10}else if($(NF)~/Meg/{print$(NF)*1000}}}}@user3289583我想你误解了约翰针对你遇到困难的问题的任何方面提供的善意和建设性的帮助。如果你不是一个专注、乐于助人、始终如一的贡献者,你就不会获得超过25万的声誉。@MarkSetchell同意。