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


    问题描述:

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

    1. AuditReport
    2. asdf
    3. qwerty
    4. asdf
    5. name, id, logindate
    6. experiment,182002, "July 31, 2022 20:00:00"
    7. unit 1998,183065, "July 3, 2022 21:00:00"
    8. 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 = "^$

    1. echo "${_input_data_}" |
    2. mawk '_+=(!__ FS=','
    1. experiment,182002, "July 31, 2022 20:00:00"
    2. unit 1998,183065, "July 3, 2022 21:00:00"
    3. 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(获取子字符串)。

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

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

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

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

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

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

  • 相关阅读:
    [STM32学习]定时器实现码表(数码管显示)
    学生老师管理系统
    <<Java>> 关于进程的那些事
    《铸梦之路》帧同步卡牌放置手游(斗罗大陆武魂觉醒、上古王冠)
    数据结构第四部分——常见排序算法总结(C语言版)
    .netCore用DispatchProxy实现动态代理
    药物管理信息系统(C#药材信息管理系统)
    LeNet-5学习笔记
    .NET C#基础:While & do-while
    C++类大小计算
  • 原文地址:https://blog.csdn.net/qq_38334677/article/details/126106689