我正在尝试合并test1和test2中第1列的两个文件。
test1
::::::::::::::
My Mynose mynose rest
hello
baby two
four
::::::::::::::
test2
::::::::::::::
My 1
hello 2
two 3
test1中的第一列是一个字符串,每个单词应与test2第1列中的确切单词匹配。
所需的输出应为:
My Mynose mynose rest 1
hello 2
baby two 3
four N/A
我尝试过各种变体:
awk 'NR==FNR{a[$1]++; next} n=split($5,x," " );for (i=;i<=n;i++); {if(x[i] in a) print $0,a}' test2 test1
但似乎无法得到正确答案。
有人可以提供帮助吗? 感谢
答案 0 :(得分:0)
awk 'NR==FNR{a[$1]=$2; next} { { found=0; for(i=1;i<=NF;i++) { if($i in a) { print $0,a[$i]; found=1; break; } } if (!found) { print $0,"N/A"} }' test2 test1
详细代码:
NR==FNR{a[$1]=$2; next}
为第一个文件创建第一个字段(word)的数组,第二个字段为值
接下来打开一个新块(仅在第二个文件的每一行上使用(由于第一个块中的下一个)
found=0;
设置var以打印N / A未找到
for(i=1;i<=NF;i++) {
循环遍历字段(每个单词)NF是字段空间作为默认分隔符的数量
if($i in a) { print $0,a[$i]; found=1; break; }
对于每个单词,如果它在数组中($ i将变为$ 1,$ 2等),打印行和相应的值,设置var以了解我们发现的停止循环(如果多个单词匹配则避免多次输入)。
if (!found) { print $0,"N/A"}
如果上一个循环没有找到该行的单词,则打印该行和N / A