【问题标题】:Lookup and Append查找和追加
【发布时间】:2014-11-15 07:03:27
【问题描述】:

你们能帮我写一下 awk 脚本吗? 我一直在考虑使用 NR=FNR 方法和子字符串但不起作用

这是我的意见

文件 1.txt

bscrnc|cellname|cellid
BBIR1|BIR004G+AW_GEUT|BI3004A
BBIR1|BIR004G+AW_GEUT|BI3004B
BBIR1|BIR004G+AW_GEUT|BI3004C
BBIR1|BIR005G+LINGONG|BI3005A
BBIR1|BIR005G+LINGONG|BI3005B

file2.txt

MB2|MBO
BP5|BPD
JH1|JHO
TN5|TTN
TK3|TKNJ
KT5|KTN
LG4|LGS
BI3|**BIR**
BH0|BIH

输出

bscrnc|cellname|cellid|sitename
BBIR1|BIR004G+AW_GEUT|BI3004A|BIR004
BBIR1|BIR004G+AW_GEUT|BI3004B|BIR004
BBIR1|BIR004G+AW_GEUT|BI3004C|BIR004
BBIR1|BIR005G+LINGONG|BI3005A|BIR005
BBIR1|BIR005G+LINGONG|BI3005B|BIR005

我们查看第一个文件中前三个单词是BI3的第三个字段,然后我们在第二个文件中看到BI3->BIR 然后我们将它附加到第四个字段中 最后三个字母/单词取自第一个文件中接下来的三个单词

非常感谢!

【问题讨论】:

    标签: awk


    【解决方案1】:

    您似乎走在了正确的轨道上(不过,正如这里经常指出的那样,如果您提供更多关于您尝试过的方法以及您认为问题出在哪里的详细信息,可能会有更多人更快地提供帮助)。

    bl.awk

    BEGIN { FS = "|"; OFS = FS }
    
    # Build the mapping from the first file (file2.txt)
    
    NR == FNR {
        sitemap[$1] = $2;
        next;
    }
    
    # Print the header and rows from the second file (file1.txt)
    
    FNR == 1 { $4 = "sitename"; print; }
    
    FNR > 1 {
        sitekey = substr($3, 1, 3);
        sitevalue = sitemap[sitekey];
        sitesuffix = substr($3, 4, 3);
        print $1, $2, $3, sitevalue sitesuffix;
    }
    

    请注意,我们希望首先将 file2.txt 放在命令行上,这样我们就可以在打印来自 file1.txt 的行之前构建地图:

    bash-3.2$ awk -f bl.awk file2.txt file1.txt
    bscrnc|cellname|cellid|sitename
    BBIR1|BIR004G+AW_GEUT|BI3004A|BIR004
    BBIR1|BIR004G+AW_GEUT|BI3004B|BIR004
    BBIR1|BIR004G+AW_GEUT|BI3004C|BIR004
    BBIR1|BIR005G+LINGONG|BI3005A|BIR005
    BBIR1|BIR005G+LINGONG|BI3005B|BIR005
    

    【讨论】:

    • 非常感谢!很详细,通俗易懂!顺便说一句,如何区分第一个和第二个文件的代码?
    • 不客气!是的,好问题。您已经知道NR == FNR(总记录号等于文件中的记录号)仅适用于第一个文件。该块中的next; 语句表示“立即转到下一条记录,不再查看任何代码”。因此,记录可以通过该块的唯一方法是NR != FNR,这当然意味着它是第二个(或通常,除了第一个)文件。
    猜你喜欢
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2017-07-02
    • 1970-01-01
    • 2022-11-02
    相关资源
    最近更新 更多