【问题标题】:parsing an irregular csv file with two delimiters in bash在 bash 中解析带有两个分隔符的不规则 csv 文件
【发布时间】:2014-12-30 20:07:17
【问题描述】:

全部,

我希望使用以下行解析 csv 文件

00000000-0000-0265-2510-017132647704,5690OD64_0W24zjsK-5GLmwjntrVyLDZhrmS,1,11/1/2014 7:29:02 AM,23435830,11179745,868,360655,69844,64637,43755,,,122.111.9.107,36,28389,-1,11677,3166,,0,11,,Apple iPad,,-1,-1,MM_CLD_Standard_Agency_43755_Daily_141101_00.csv

我需要使用两个分隔符来解析文件

"," & "_"

下划线出现在第二列和最后一列。目前我正在使用 awk 来解析文件,如下所示,但是您注意到 col2 中出现下划线导致文件被意外解析。我想知道如何在 col2 中转义下划线,以便我从最后一列中拉出的字符串不受影响

awk -F "," 'BEGIN {OFS=","} {$23="";print $4,$3,$2,$6,FILENAME}' $i|tail -n +2|awk -F ",|_" 'BEGIN {OFS=","} {print $1,$2,$3,$4,$10}'

所需的输出将是

11/1/2014 7:29:02 AM,1,5690OD64_0W24zjsK-5GLmwjntrVyLDZhrmS,11179745,141101

非常感谢,

【问题讨论】:

  • 你的预期输出是什么?
  • 不要通过FS 拆分两者。通过FS 拆分, 并在两个需要的字段上手动使用split
  • 时间怎么到了7:29:54
  • @EtanReisner,你能举个例子吗?
  • 再试一次,保持简单。您不需要包含 30 个字段(或其他任何字段)的行来描述您的问题,并且单行无法充分说明问题。只需发布 3 或 4 行示例输入,每行都有 4 或 5 个字段来演示您的问题以及该输入的相关预期输出。您越容易让我们为您提供帮助,我们就越有可能这样做。

标签: bash parsing csv awk delimiter


【解决方案1】:
awk -F, -v OFS=, '{n=split($NF, a, /_/); print $4, $3, $2, $6, a[n-1]}' <<END
x,5690OD64_0W24zjsK-5GLmwjntrVyLDZhrmS,1,11/1/2014 7:29:02 AM,y,11179745,z,...,MM_CLD_Standard_Agency_43755_Daily_141101_00.csv
END
11/1/2014 7:29:02 AM,1,5690OD64_0W24zjsK-5GLmwjntrVyLDZhrmS,11179745,141101

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 2019-12-18
    • 2023-03-31
    相关资源
    最近更新 更多