Awk 另一个文件中字符串的Grep特定部分

Awk 另一个文件中字符串的Grep特定部分,awk,grep,Awk,Grep,我想将1.txt中数字的前三位从2.txt中零后的前三位变为grep cat 1.txt 23456 12345 6789 cat 2.txt 20000023485 xxx888 20000012356 xxx888 20000067234 xxx234 预期产量 20000023485 xxx888 20000012356 xxx888 用grep试试这个: grep -f <(sed 's/^\(...\).*/00\1/' file1) file2 grep

我想将1.txt中数字的前三位从2.txt中零后的前三位变为grep

cat 1.txt

 23456
 12345
 6789
cat 2.txt

 20000023485 xxx888
 20000012356 xxx888
 20000067234 xxx234
预期产量

 20000023485 xxx888
 20000012356 xxx888
用grep试试这个:

grep -f <(sed 's/^\(...\).*/00\1/' file1) file2

grep-fgrep-f将匹配给定文件中的一系列模式,每行一个。但首先需要将1.txt转换为所需的模式。在您的例子中,您需要1.txt每行的前三个字符,在零之后:00*234、00*123等(我假设您至少需要一个零)

{a[substr($1,0,3)];next}
-将前3个字符存储在关联数组中

匹配($1,/0+/);if(a中的substr($1,RSTART+RLENGTH,3)

匹配零序列后的3个字符,并检查这3个字符是否存在于先前创建的关联数组中,如果找到匹配项,则打印整行。

您尝试过任何操作吗?是的,但显然无法工作grep“$(awk'{num=substr($1,1,3);print num}'1.txt)”$(awk'{num=substr($1,3,7);sub(/^0+/,“”,num);print num}'2.txt)“grep的使用非常聪明,但我认为这不是OP要求的(匹配2.txt中零后的前3位)。也许
grep-f
20000023485 xxx
20000012356 xxx
sed -e 's/^\(...\).*$/00*\1/' 1.txt > 1f.txt
grep -f 1f.txt 2.txt
awk 'FNR==NR {a[substr($1,0,3)];next}
             {match($1, /0+/);
             if(substr($1, RSTART+RLENGTH,3) in a)print}' 1.txt 2.txt