gpt4 book ai didi

awk - awk无法将两列合并为一列

转载 作者:行者123 更新时间:2023-12-01 22:56:19 26 4
gpt4 key购买 nike

我有一个格式为 name,id,logindate 的 csv,其中 logindates 显示为 "July 15, YYYY HH:mm:ss"abc ,123,"7 月 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 '{ 打印 $1, $2, $3""$4 }' > test.csv

我还尝试了以下方法:
https://stackoverflow.com/a/48386788/16034206
awk '{$2=$2"-"$3;$3=""} 1' 输入文件
就我而言:
/usr/bin/env awk {BEGIN{FS=","} NR>5 {print}' sample.csv | awk '{ gsub("\"", "") } { $1=$1 } 1' | awk '{ $3=$3""$4, $4=""} 1' > test.csv

最佳答案

每当您发现自己将 1 次 awk 调用的输出通过管道传输到另一次 awk 调用的输入时,您几乎总是走错路。

使用任何 awk:

$ awk 'BEGIN{FS=OFS="\""} NR>5{for (i=2; i<=NF; i+=2) gsub(/ *, */," ",$i); print}' sample.csv
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 处理更复杂的 CSV 的一般方法,请参阅 What's the most robust way to efficiently parse CSV using awk? .

关于awk - awk无法将两列合并为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73182804/

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