对于上下文,这是后续在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.txt
index()
/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 很大,则可能会超过“打开文件太多”阈值。如果这是一个问题,请告诉我们。