gpt4 book ai didi

replace - 替换第一列文本中的特定字符

转载 作者:行者123 更新时间:2023-12-04 17:02:49 25 4
gpt4 key购买 nike

我有一个文本文件,我正在尝试将第一列中的特定字符 (.) 替换为另一个字符 (-)。每个字段都以逗号分隔。有些行的最后 3 列是空的,因此它们在末尾有 3 个逗号。

文本文件示例:

abc.def.ghi,123.4561.789,ABC,DEF,GHI
abc.def.ghq,124.4562.789,ABC,DEF,GHI
abc.def.ghw,125.4563.789,ABC,DEF,GHI
abc.def.ghe,126.4564.789,,,
abc.def.ghr,127.4565.789,,,

我尝试的是使用 awk 替换 '.'在带有“-”的第一列中,然后打印出内容。

ETA:尝试了 sarnold 的建议并得到了我想要的输出。

ETA2:我可以有更长的第一列。有没有办法只更改前 3 个 '.'在第一列到'-',所以我得到输出
abc-def-ghi-qqq.www,123.4561.789,ABC,DEF,GHI
abc-def-ghq-qqq.www,124.4562.789,ABC,DEF,GHI
abc-def-ghw-qqq.www,125.4563.789,ABC,DEF,GHI
abc-def-ghe-qqq.www,126.4564.789,,,
abc-def-ghr-qqq.www,127.4565.789,,,

最佳答案

. 是“任何字符”的正则表达式。用 \ 转义它,这意味着 . :

$ awk -F, '{gsub(/\./,"-",$1); print}' textfile.csv 
abc-def-ghi 123.4561.789 ABC DEF GHI
abc-def-ghq 124.4562.789 ABC DEF GHI
abc-def-ghw 125.4563.789 ABC DEF GHI
abc-def-ghe 126.4564.789
abc-def-ghr 127.4565.789
$

默认情况下,输出字段分隔符是一个空格。设置 OFS = "," 以设置:
$ awk  -F, 'BEGIN {OFS=","} {gsub(/\./,"-",$1); print}' textfile.csv 
abc-def-ghi,123.4561.789,ABC,DEF,GHI
abc-def-ghq,124.4562.789,ABC,DEF,GHI
abc-def-ghw,125.4563.789,ABC,DEF,GHI
abc-def-ghe,126.4564.789,,,
abc-def-ghr,127.4565.789,,,

这仍然允许更改多个字段:
$ awk  -F, 'BEGIN {OFS=","} {gsub(/\./,"-",$1); gsub("1", "#",$2); print}' textfile.csv 
abc-def-ghi,#23.456#.789,ABC,DEF,GHI
abc-def-ghq,#24.4562.789,ABC,DEF,GHI
abc-def-ghw,#25.4563.789,ABC,DEF,GHI
abc-def-ghe,#26.4564.789,,,
abc-def-ghr,#27.4565.789,,,

我不知道 -OFS, 是做什么的,但它不是受支持的命令行选项;使用它来设置输出字段分隔符是我的一个错误。在 OFS 程序中设置 awk 效果很好。

关于replace - 替换第一列文本中的特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10406961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com