在 txt 文件中搜索并在新文件中搜索每个结果

在 txt 文件中搜索并在新文件中搜索每个结果

对于上下文,这是后续在txt文件中搜索然后在新的txt文件中打印有一些额外的并发症。

我有2个txt文件,第一个是data.txt文件,其中包含2000多行,其中的数据如下:

alpha
hmld 573
otndgd 29
fidnt 1962

beta
jdkrshm 2
adny 14
urmekhjf 6893
...

第二个文件是values.txt,

我想搜索并打印(在新的txt文件中)包含values.txt中的值列表之一的任何行,例如

dn
hm
sf

,和 result1.txt 一样(头部像“alpha”):

fidnt 1962 alpha
adny 14 beta

和 result2.txt 类似:

hmld 573 alpha
jdkrshm 2 beta

我的系统:ubuntu

此致

答案1

再说一次,awk你的朋友在这里:

awk '
  !values_processed {
    result[$0] = "result"FNR".txt"; next
  }
  !NF {FNR=0; next}
  FNR==1 {header=$0; next}
  {
    for (value in result)
      if (index($0, value))
        print $0, header > result[value]
  }' values.txt values_processed=1 data.txt

使用与中相同的方法你之前问题的答案,但是将文件行中的值列表获取values.txt到关联数组中,该数组根据 中的行号记录每个值的输出文件名称,并使用 using而不是匹配values.txt来查找它们来进行子字符串搜索。data.txtindex()/regex/

答案2

我认为你想要的是(未经测试):

awk '
    NR==FNR {
        out[$1] = "result" NR ".txt"
        next
    }
    {
        for ( i=2; i<=NF; i++ ) {
            for ( str in out ) {
                if ( index($i,str) ) {
                    print $i, $1 > out[str]
                }
            }
        }
    }
' values.txt RS='' FS='\n' data.txt

如果values.txt 很大,则可能会超过“打开文件太多”阈值。如果这是一个问题,请告诉我们。

相关内容