从一个文件中读取数字,并使用awk脚本在另一个文件中搜索数字
我有两个文件,a.txt和b.txt,它们都是由数字组成的,每行一个。我想做的是从a.txt读取每个数字,然后在b.txt中搜索。这是我写的从一个文件中读取数字,并使用awk脚本在另一个文件中搜索数字,awk,Awk,我有两个文件,a.txt和b.txt,它们都是由数字组成的,每行一个。我想做的是从a.txt读取每个数字,然后在b.txt中搜索。这是我写的awk脚本文件,我可以像这样执行search.awk文件 awk -f search.awk a.txt 但是如何在b.txt中搜索每个数字呢 #!/bin/awk -f { print $1 # how to search for $1 in b.txt? } 更新 如果不仅要搜索1文件,而且一个目录中有多个文件要搜索a.txt中的
awk
脚本文件,我可以像这样执行search.awk
文件
awk -f search.awk a.txt
但是如何在b.txt中搜索每个数字呢
#!/bin/awk -f
{
print $1
# how to search for $1 in b.txt?
}
更新
如果不仅要搜索1文件,而且一个目录中有多个文件要搜索a.txt中的每个数字,该怎么办?我的意思是,在a_dir/*
中的所有文件中搜索a.txt中的每个数字?代码示例:
$cat a.txt 1. 3. 5. 7. 9 11 13 $cat b.txt 1. 4. 7. 10 13 $cat c.txt 3. 11 $awk'NR==FNR{a[$1]=$1;next}$1==a[$1]&&$1=“”“a.txt b.txt c.txt 1. 7. 13 3. 11 代码示例:
$cat a.txt 1. 3. 5. 7. 9 11 13 $cat b.txt 1. 4. 7. 10 13 $cat c.txt 3. 11 $awk'NR==FNR{a[$1]=$1;next}$1==a[$1]&&$1=“”“a.txt b.txt c.txt 1. 7. 13 3. 11
将
a.txt
中的行隐藏到一个数组中,并打印数组中出现的b.txt
中的行
awk 'NR == FNR{a[$0]; next} $0 in a' a.txt b.txt
编辑:
如果要搜索多个文件,此版本将打印匹配的文件名和行
awk 'NR == FNR{a[$0]; next} $0 in a{print FILENAME, $0}' a.txt b.txt c.txt
将
a.txt
中的行隐藏到一个数组中,并打印数组中出现的b.txt
中的行
awk 'NR == FNR{a[$0]; next} $0 in a' a.txt b.txt
编辑:
如果要搜索多个文件,此版本将打印匹配的文件名和行
awk 'NR == FNR{a[$0]; next} $0 in a{print FILENAME, $0}' a.txt b.txt c.txt
向上投票,但如果要搜索多个文件怎么办?请看我的编辑。idomatic awk解决方案[几乎]是@1_CR发布的,这一个有一些警告。例如,它将从b.txt等打印任何空行,这几乎肯定是不可取的。另外,就像《法戈》中的史蒂夫·布塞米斯(Steve Buscemis)一样,它只是看起来有点滑稽——。@EdMorton你完全正确,这些空行很难看:)我需要不必要的代码来避免这种情况。谢谢。升级,但是如果要搜索多个文件怎么办?请看我的编辑。idomatic awk解决方案[几乎]是@1_CR发布的,这一个有一些警告。例如,它将从b.txt等打印任何空行,这几乎肯定是不可取的。另外,就像《法戈》中的史蒂夫·布塞米斯(Steve Buscemis)一样,它只是看起来有点滑稽——。@EdMorton你完全正确,这些空行很难看:)我需要不必要的代码来避免这种情况。谢谢。不需要
++
,只需将其保留为a[$0]代码>+1.不需要++
,只需将其保留为a[$0]代码>+1尽管如此。