【问题标题】:AWK to extract data from one file with respect to anotherAWK 从一个文件中提取相对于另一个文件的数据
【发布时间】:2013-09-10 13:00:35
【问题描述】:

我有一个 awk 脚本,通过在一个文件中进行模式匹配来提取数据,而该模式在另一个文件中可用。 在运行脚本时,我得到了一些其他模式,有没有办法更新这个 awk 命令,以便它只查找确切的模式。

awk 'NR==FNR{a[$0]=1;next} {for (i in a) if ($0 ~ i) {print; break}}' /cygdrive/c/KPI/test/test.csv /cygdrive/c/KPI/test/raw/SCCP_ADMIN_FINAL.csv | awk -F"," '{math[($2)]+=$3}END{for (i in math) {print i,math[i]}}'|sort

AINGO 253694944
ARL 67932655
BPL 65466640
CELCO 52181696
CINGU 1147311508
CMM 181063417
CNG 2128485188
CONEC 2434
DNFPM 84467207
ERP 286990079
ETC 45013333
GWLES 111261691
HUM 283010928
IDEAC 143610898
INPHM 210392395
LONES 5
MAN 176941298
MEA 48457597
MONET 335
MOROM 105092112
MOSSL 175407690
ONE 554898379
PTTSA 81164497
RPG 63771906
SPNEP 148860282
TATAS 59847841
TTETC 969
WATAN 187799790
WND 222047363

文件/cygdrive/c/KPI/test/test.csv:

cat /cygdrive/c/KPI/test/test.csv
CNG
WND
HUM
AINGO
IDEAC
MOSSL
INPHM
CMM
MAN
MEA
BPL
ERP
DNFPM
SPNEP
GWLES
ETC
CINGU
ARL
RPG
MOROM
PTTSA
ONE
CELCO
TATAS
WATAN

它有 25 个名字,但在上面的 awk 输出中我得到了 29 的日期,所以结果 conec、lonec 等会额外出现。

【问题讨论】:

    标签: bash csv sed awk


    【解决方案1】:

    对于完全匹配避免正则表达式,即

    这里不是正则表达式匹配:

    if ($0 ~ i)
    

    使用相等来比较,像这样:

    if ($0 == i)
    

    【讨论】:

    • 我会在几分钟后回到我的电脑上用你的数据文件测试你的完整命令。
    • 确定 anubhav,我将等待您的回复。我的命令是 grep -F -f /cygdrive/c/KPI/test/raw/25-sccp-raw.csv /cygdrive/c/KPI/test/raw/SCCP_ADMIN_FINAL.csv | awk -F"," '{math[($2)]+=$3}END{for (i in math) {print i,math[i]}}'|sort
    • 我认为您在这里提供了第一个 cvs 数据,但缺少第二个 csv 数据。能否提供一下。
    • Anubhav 第二个 csv 文件非常大,我猜大概有 1000 个条目,所以很难与您分享。您可以考虑其余行的任何值。如果您提供像 1 这样的命令也会很好。它会在第二个搜索第一个 csv 的数据并提供匹配的日期。 1.它在第二个搜索第一个csv的数据并提供不匹配的数据。所以第一个命令的输出应该是匹配的模式,第二个命令的输出应该是不匹配的模式。可能吗 ?我想需要进行一些更改,我也在尝试处理您共享的命令。
    • 我相信您的命令可以简化。您能否从第一个和第二个 csv 中获取 10 条记录,让我知道您的预期输出是什么,以便我可以相应地指导您。
    猜你喜欢
    • 2018-07-22
    • 2023-03-10
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多