【问题标题】:Is there a way to delete the last two characters of a string in a CSV file?有没有办法删除 CSV 文件中字符串的最后两个字符?
【发布时间】:2021-07-23 06:56:47
【问题描述】:

我需要删除 csv 文件中第 7 个值的小数点。这更像是一个字符串操作问题,因为我希望在 CSV 文件中保留前导零。所以 int() 不是一个选项,因为它也会删除前导零。有人可以帮忙吗?

myfile.csv 内容

00014,0001,some place,user1,2020-04-30,7339.jpg,3625.6
00015,0001,some place,user1,2020-04-29,8839.jpg,0030.1

需要输出

00014,0001,some place,user1,2020-04-30,7339.jpg,3625
00015,0001,some place,user1,2020-04-29,8839.jpg,0030

谢谢

【问题讨论】:

  • 我需要删除小数点和之后的字符。所以最后两个字符。

标签: csv awk


【解决方案1】:
$ cat myfile.csv
00014,0001,some place,user1,2020-04-30,7339.jpg,3625.6
00015,0001,some place,user1,2020-04-29,8839.jpg,0030.1
$ sed -e 's/\..$//' myfile.csv
00014,0001,some place,user1,2020-04-30,7339.jpg,3625
00015,0001,some place,user1,2020-04-29,8839.jpg,0030
$ awk '{sub("\..$","",$7)}1' FS=, OFS=, myfile.csv
00014,0001,some place,user1,2020-04-30,7339.jpg,3625
00015,0001,some place,user1,2020-04-29,8839.jpg,0030

如果要考虑小数点后多于一位的可能性:

awk '{sub("\.[0-9]+$","",$7)}1' FS=, OFS=, myfile.csv
sed -E 's/\.[0-9]+$//' myfile.csv

【讨论】:

  • 完美。谢谢! awk 语句正是我所需要的。
【解决方案2】:

这更像是一个字符串操作

那么在这种情况下,您可以使用String functions 之一substr。让file.txt内容成为

00014,0001,some place,user1,2020-04-30,7339.jpg,3625.6
00015,0001,some place,user1,2020-04-29,8839.jpg,0030.1

然后

awk 'BEGIN{FS=",";OFS=","}{$7=substr($7,1,length($7)-2);print}' file.txt

输出

00014,0001,some place,user1,2020-04-30,7339.jpg,3625
00015,0001,some place,user1,2020-04-29,8839.jpg,0030

这只是将第 7 列的内容替换为 (字符数 - 2) 它的第一个字符,即抛弃最后两个字符。

【讨论】:

    猜你喜欢
    • 2017-02-22
    • 2016-01-21
    • 2014-06-02
    • 2019-10-25
    • 2015-08-22
    • 2013-06-18
    • 1970-01-01
    • 2022-01-22
    • 2014-11-08
    相关资源
    最近更新 更多