gpt4 book ai didi

unix - 在特殊字段 AWK 中搜索字符

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

我需要解析 awk 脚本中的字段来搜索特殊字符,如果存在则用“,”或“/”替换
awk 脚本将 CSV 转换为 DAT。定义的字段分隔符是;但有时用户会发送包含字段分隔符的评论。为了解决这个问题,我们需要解析 NUMBER $4 的 COMMENT 字段,如果该字段包含 ;用/或逗号代替
这是文件

"PAT";"TARO";"GEO";"COMMENT"
"FRT";"1256";"USA";"THIS IS A COMMENT ; AFTER COMMENT"

outcome expected

PAT TARO GEO COMMENT
FRT 1256 USA THIS IS A COMMENT / AFTER COMMENT


BEGIN {
FS = ";" ;
OFS = " " ;

print "pat taro geo comment";


}

NR==1{
next
}

{
pat= $1;
taro = $2;
geo = $3 ;
comment = $4 ;
}

if $4 contains ";" then
replace with "/"
end if;

{
print "pat,taro,geo,comment";

}
我怎样才能做到这一点 ?
先感谢您

最佳答案

如果字段中没有换行符,您可以使用例如 GNU awk 及其 FPAT特征:

$ gawk '
BEGIN {
FPAT="([^;]*)|(\"[^\"]+\")"
}
{
print $4
}' file
输出:
"COMMENT"
"THIS IS A COMMENT ; AFTER COMMENT"
如果您仍想更换 ;在评论中,添加 gsub(/;/,"/",$4)之前 print .
编辑 :
$ gawk '
BEGIN {
FPAT="([^;]*)|(\"[^\"]+\")" # FPAT;separates;semicolons;"and quotes"
print "pat taro geo comment" # print header
}
{
for(i=1;i<=NF;i++) # loop all 4 fields
gsub(/^"|"$/,"",$i) # remove quotes

gsub(/;/,"/",$4) # change the ; in $4 to /

pat= $1 # no need for this mut since you wanted
taro = $2
geo = $3
comment = $4

print pat,taro,geo,comment # output new vars but you could as well:
# print $1,$2,$3,$4 # use this too or
# print $0 # since record was rebuilt on gsub
}' file
输出:
pat taro geo comment
PAT TARO GEO COMMENT
FRT 1256 USA THIS IS A COMMENT / AFTER COMMENT

关于unix - 在特殊字段 AWK 中搜索字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64589202/

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