查找和追加

时间:2014-11-15 07:03:27

标签: awk

伙计们,你们可以帮助我使用awk脚本, 我一直在考虑使用NR = FNR方法和子串但不起作用

这是我的输入

file 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 然后我们将它附加到第四个字段中 最后三个字母/单词取自第一个文件中的后三个单词

非常感谢你!

1 个答案:

答案 0 :(得分:0)

看起来你走在了正确的轨道上(不过,正如在这里经常指出的那样,如果你提供了更多有关你尝试过的细节以及你认为问题所在的地方,那么更多的人可能会帮助更快。)

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