awk错误:无法在awk中将两列合并为一列

问题描述:

    我有一个 csv 格式name,id,logindate,其中 logindates 显示为"July 15, YYYY HH:mm:ss"ie abc,123,"July 15, YYYY HH:mm:ss"。请注意,前 5 行中应跳过标题和其他信息。因此,示例 csv 文件可能如下所示:

AuditReport  
asdf  
qwerty  
asdf  
name, id, logindate   
experiment,182002, "July 31, 2022 20:00:00"  
unit 1998,183065, "July 3, 2022 21:00:00"  
asdf, 202065, "May 25, 2022 20:00:00" 

    对于我的输出,我想获得以下内容(标题已删除):

experiment,182002, "July 31 2022 20:00:00"  unit 1998,183065, "July 3 2022 21:00:00" asdf, 202065, "May 25 2022 20:00:00"

    我的主要任务是即使在字符串中包含逗号也能够正确解析逗号

    经过大量谷歌搜索和几个 SO 问题后,我得出结论,使用 csv 解析器、其他语言,甚至 GNU awk(使用 FPAT)是一个更好的工具,但我被告知生产服务器在我父亲工作的公司使用 awk,并且被认为不是 gawk。(我正在做一些随机的小任务,为自己找工作做准备)

    我试图通过删除“”并通过 FS="," 解析来解决此问题,然后再次将最后两列连接在一起。但是,我的输出一直给我 4 列(无法将最后两列连接成一列)

我的代码是:

/usr/bin/env awk {BEGIN{FS=","} NR>5 {print}' sample.csv | awk '{ gsub("\"", "") } { $1=$1 } 1' | awk '{ print $1, $2, $3" "$4 }' > test.csv

解决思路一:

    一旦通过设置检测到标题行,您就不必担心逗号解析

  • FS = "^$

echo "${_input_data_}" | 

mawk '_+=(!__<NF)*NR { FS="^$" } _<NR' FS=','
experiment,182002, "July 31, 2022 20:00:00"  
unit 1998,183065, "July 3, 2022 21:00:00"  
asdf, 202065, "May 25, 2022 20:00:00"

解决思路二:

    使用您显示的示例,请尝试以下awk代码。用 GNU 编写和测试awk,应该可以在任何 POSIXawk版本中工作。根据 OP 的要求,使用awk'smatch函数在其中使用正则表达式"[a-zA-Z]+ [0-9]{1,2}, [0-9]{4} [0-9]{2}(:[0-9]{2}){2}[^"]*"来获得预期的结果。然后在打印值时使用 substr(获取子字符串)。

awk '
match($0,/"[a-zA-Z]+ [0-9]{1,2}, [0-9]{4} [0-9]{2}(:[0-9]{2}){2}[^"]*"/){
  val=substr($0,RSTART+1,RLENGTH-2)
  gsub(/,/,"",val)
  print substr($0,1,RSTART-1) val substr($0,RSTART+RLENGTH)
}
' Input_file

或者,如果您想保留"所需值的前后,则对上述代码稍作更改即可:

awk '
match($0,/"[a-zA-Z]+ [0-9]{1,2}, [0-9]{4} [0-9]{2}(:[0-9]{2}){2}[^"]*"/){
  val=substr($0,RSTART,RLENGTH)
  gsub(/,/,"",val)
  print substr($0,1,RSTART-1) val substr($0,RSTART+RLENGTH)
}
'  Input_file

解决思路三(这是解决小编问题的思路)

    以上仅为部分解决思路介绍,请查看全部内容,请添加下方公众号后回复001,即可查看。公众号有许多评分最高的编程书籍和其它实用工具,绝对好用,可以放心使用

    如果您觉得有帮助,可以关注公众号——定期发布有用的资讯和资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快撑死的鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值