Awk 与列表项关联的查找值
我试图从excel中近似vlookup 我有两个文件 文件#1-list.txt:Awk 与列表项关联的查找值,awk,Awk,我试图从excel中近似vlookup 我有两个文件 文件#1-list.txt: green purple orange 文件#2-reads.txt: blue 2 green 3 red 5 purple 6 我试图读入list.txt的条目,然后转到reads.txt并取出关联的值 所需的输出将是: green 3 purple 6 orange 0 如果我写: awk -F ' ' 'FNR == NR {keys[$1]; next} {if ($1 in keys) prin
green
purple
orange
文件#2-reads.txt:
blue 2
green 3
red 5
purple 6
我试图读入list.txt的条目,然后转到reads.txt并取出关联的值
所需的输出将是:
green 3
purple 6
orange 0
如果我写:
awk -F ' ' 'FNR == NR {keys[$1]; next} {if ($1 in keys) print $1,$2}' list.txt reads.txt
我得到:
green 3
purple 6
blue 0
green 3
red 0
purple 6
但橙色没有,我需要这条线:
orange 0
如果我写
awk -F ' ' 'FNR == NR {keys[$1]; next} {if ($1 in keys) print $1,$2; else print $1,0}' list.txt reads.txt
我得到:
green 3
purple 6
blue 0
green 3
red 0
purple 6
有没有办法解决这个问题
这里是主要的新手,所以感谢您的帮助 第一种解决方案(根据所示样本):请您尝试以下内容,并使用所示样本编写和测试
awk '
FNR==NR{
arr[$1]=$2
next
}
($0 in arr){
print $0,arr[$0]
next
}
{
print $0,0
}
' reads.txt list.txt
green 3
purple 6
orange 0
对于所示样本,输出如下
awk '
FNR==NR{
arr[$1]=$2
next
}
($0 in arr){
print $0,arr[$0]
next
}
{
print $0,0
}
' reads.txt list.txt
green 3
purple 6
orange 0
第二种解决方案(通用解决方案):如果名为
的输入文件reads.txt
具有相同第一列的多个值,并且您希望打印list.txt
中存在的所有值,请尝试以下操作
awk '
FNR==NR{
++arr[$1]
val[$1 OFS arr[$1]]=$2
next
}
($0 in arr){
for(i=1;i<=arr[$0];i++){
print $0,val[$0 OFS i]
}
next
}
{
print $0,0
}
' reads.txt list.txt
green 3
green 15
green 120
purple 6
orange 0
现在,在运行这个通用解决方案之后,我们将看到以下内容
awk '
FNR==NR{
++arr[$1]
val[$1 OFS arr[$1]]=$2
next
}
($0 in arr){
for(i=1;i<=arr[$0];i++){
print $0,val[$0 OFS i]
}
next
}
{
print $0,0
}
' reads.txt list.txt
green 3
green 15
green 120
purple 6
orange 0
如果顺序不重要,我会使用左键而不是
awk
:
$join-a1-e0-o0,2.2顺序不重要,只要始终不变,非常有用,谢谢!这两种方法都很有效-通用解决方案稍后可能会有用-谢谢!