伙计们,你们可以帮助我使用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 然后我们将它附加到第四个字段中 最后三个字母/单词取自第一个文件中的后三个单词
非常感谢你!答案 0 :(得分:0)
看起来你走在了正确的轨道上(不过,正如在这里经常指出的那样,如果你提供了更多有关你尝试过的细节以及你认为问题所在的地方,那么更多的人可能会帮助更快。)
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