gpt4 book ai didi

awk - 如何使用awk将特定分隔符的引号添加到行尾?

转载 作者:行者123 更新时间:2023-12-05 01:05:04 24 4
gpt4 key购买 nike

我正在尝试修改一个文件:(file.txt)

abc~123~xyz~123456~12~0.12~14~1.1~  
omn~124~xdz~923231~13~0.0~13~1.1~14~0.45~19~80.1~

到(new_file.txt)

abc~123~xyz~123456~"12~0.12~14~1.1~"  
omn~124~xdz~923231~"13~0.0~13~1.1~14~0.45~19~80.1~"

我尝试使用 awk 命令:

awk -F'~' '{for(i=1;i<=4;i++){printf "%s~", $i}; printf"\""} {for(i=5;i<=NF;i+=1){printf "%s~", $i}; printf "\"\n"}' file.txt > new_file.txt

但我得到的输出是:

abc~123~xyz~123456~"12~0.12~14~1.1~~"  
omn~124~xdz~923231~"13~0.0~13~1.1~14~0.45~19~80.1~~"

谁能帮我解决这个问题,因为我在每行末尾都有一个额外的“~”?任何引用资料都会有所帮助,因为我在处理 sed 和 awk 命令时会感到困惑。

最佳答案

您在行尾有一个 ~ 分隔符。因此,您在此字段分隔符之后有一个额外的空白字段。您可以通过以下方式检查:

$ awk -F'~' '{print NF "|" $NF "|"}' file.txt
9||
13||

看到了吗?在打印最后一个空字段后跟 ~ 时,您只需将其连接到前一个字段,即 ~~。试试:

$ awk -F '~' -vOFS='~' '{$5 = "\"" $5; $NF = $NF "\""; print}' file.txt
abc~123~xyz~123456~"12~0.12~14~1.1~"
omn~124~xdz~923231~"13~0.0~13~1.1~14~0.45~19~80.1~"

我们只是将~声明为输入和输出(带有变量OFS)字段分隔符,在第五个字段前面加上一个",追加从一个到最后一个字段,然后打印。

关于awk - 如何使用awk将特定分隔符的引号添加到行尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71090137/

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