Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 使用grep查找每行中的字符串_Unix_Grep_Cut - Fatal编程技术网

Unix 使用grep查找每行中的字符串

Unix 使用grep查找每行中的字符串,unix,grep,cut,Unix,Grep,Cut,我只想找到从文件\u B到文件\u A的第8-17位的值 文件包含: $cat FILE_B 9237770 63943100 6393390990 文件A包含 $cat FILE_A 50000092280794230000092384245540 50000092280938880000009237770528 50000092377704630000009154893441 输出应该是 50000092377704630000009154893441 自第8-17

我只想找到从文件\u B到文件\u A的第8-17位的值

文件包含:

 $cat FILE_B
 9237770
 63943100
 6393390990
文件A包含

 $cat FILE_A
 50000092280794230000092384245540
 50000092280938880000009237770528
 50000092377704630000009154893441
输出应该是

  50000092377704630000009154893441
自第8-17位(9237770463)起,数字包含9237770(位于文件B中)

我有一个脚本,但没有给出确切的输出。

 $cut -c 8-17 FILE_A | grep -f FILE_B
输出:

 9237770
请尝试以下命令:

cut -c 8-17 FILE_A |
   grep -nf FILE_B |
     cut -d: -f1 |
       awk 'FNR==NR{a[$1];next};FNR in a' - FILE_A
  • -n
    选项添加到
    grep
    以打印行号(建议
    fgrep
  • 然后
    cut
    这些数字
  • 使用
    awk
    打印这些行

如果您想基本上推断您已经完成的工作,您可以使用
sed
对文件进行预处理,使其成为真正的正则表达式列表:

例如:

sed 's/.*/^.\{6\}&.*$/' FILE_B
产生

^.{6}9237770.*$
^.{6}63943100.*$
^.{6}6393390990.*$
您可以这样使用它:

egrep -f <(sed 's/.*/^.\{6\}&.*$/' FILE_B) FILE_A
白鹭-f