我需要在另一个文件中搜索一个文件的内容。
尝试过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
预期结果:
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
但是由于某种原因,它仅打印目标文件的标题,而没有其他内容。
答案 0 :(得分:1)
问题:
-F,
不适当,因为您的数据未经过逗号限制index
函数。您可以使用此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
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