Bash 在循环密钥文件时使用AWK搜索另一个数据文件
我需要在另一个文件中搜索一个文件的内容 尝试了Bash 在循环密钥文件时使用AWK搜索另一个数据文件,bash,unix,awk,grep,Bash,Unix,Awk,Grep,我需要在另一个文件中搜索一个文件的内容 尝试了grep,但我想要目标文件中的索引列: grep -oFf file1 file2 源文件: 1 /data/user/parent_dir_1 2 /data/user/parent_dir_2 Dir_name size /data/user/parent_dir_1/child_1 100066 /data/user/pa
grep
,但我想要目标文件中的索引列:
grep -oFf file1 file2
源文件:
1 /data/user/parent_dir_1
2 /data/user/parent_dir_2
Dir_name size
/data/user/parent_dir_1/child_1 100066
/data/user/parent_dir_1/child_2/sub_child_1 465456
/data/user/parent_dir_1/child_2/sub_child_2 54564564
/data/user/parent_dir_1/child_2/sub_child_3 464645645
/data/user/parent_dir_1/child_3/sub_child_1 45454
/data/user/parent_dir_2 1313134
/data/user/parent_dir_3 1313134
/data/user/parent_dir_4 1313134
/data/user/parent_dir_5 1313134
/data/user/parent_dir_6 1313134
目标文件(制表符分隔):
1 /data/user/parent_dir_1
2 /data/user/parent_dir_2
Dir_name size
/data/user/parent_dir_1/child_1 100066
/data/user/parent_dir_1/child_2/sub_child_1 465456
/data/user/parent_dir_1/child_2/sub_child_2 54564564
/data/user/parent_dir_1/child_2/sub_child_3 464645645
/data/user/parent_dir_1/child_3/sub_child_1 45454
/data/user/parent_dir_2 1313134
/data/user/parent_dir_3 1313134
/data/user/parent_dir_4 1313134
/data/user/parent_dir_5 1313134
/data/user/parent_dir_6 1313134
预期结果:
Dir_name size Index
/data/user/parent_dir_1/child_1 100066 1
/data/user/parent_dir_1/child_2/sub_child_1 465456 1
/data/user/parent_dir_1/child_2/sub_child_2 54564564 1
/data/user/parent_dir_1/child_2/sub_child_3 464645645 1
/data/user/parent_dir_1/child_3/sub_child_1 45454 1
/data/user/parent_dir_2 1313134 2
awk -F, 'FNR==NR{k[$1]=1;next;} FNR==1 || k[$1]' Source_File Target_File
到目前为止,我已经
Dir_name size Index
/data/user/parent_dir_1/child_1 100066 1
/data/user/parent_dir_1/child_2/sub_child_1 465456 1
/data/user/parent_dir_1/child_2/sub_child_2 54564564 1
/data/user/parent_dir_1/child_2/sub_child_3 464645645 1
/data/user/parent_dir_1/child_3/sub_child_1 45454 1
/data/user/parent_dir_2 1313134 2
awk -F, 'FNR==NR{k[$1]=1;next;} FNR==1 || k[$1]' Source_File Target_File
但由于某些原因,它只打印目标文件的头,而不打印其他文件 两个问题:
-F,
不合适,因为您的数据没有逗号删除索引
函数来实现这一点awk
awk -v OFS='\t' 'FNR==NR{k[$2]=$1;next;} FNR==1{print $0, "Index"}
{for (i in k) if (index($1, i))
{print $0, k[i]; break}}' Source_File Target_File | column -t
谢谢现在我可以看到结果了。。。。如何在输出中从源文件捕获索引?再次感谢。这正是我要找的。我必须检查为什么在运行进程时进程会被终止。我的目标文件很大~2000万条记录。脚本花费了相当多的时间,但没有产生任何结果。我试图使用不带索引的awk输出的输出组合作为带索引的输出的输入。这样,要处理的总行数将从20M减少到7M。祝你好运。但是,知道最新的awk是否需要很长时间吗?如果
Target\u文件
很大,则将其拆分为较小的块,然后运行awk
命令