如何编写for循环以将数据提取到新创建的文件?

时间:2019-05-29 14:27:13

标签: bash

我有一种情况,我想从上面两行匹配的地方获取

我有两个文件:

文件1

Ag
Ab
Ah
Av
Ax

文件2

jb:fun_0
jb:fun_jack_0
jb1:Ag

jb:fun_1
jb:fun_jack_1
jb1:Ab

jb:fun_2
jb:fun_jack_3
jb1:Ai

jb:fun_4
jb:fun_jack_4
jb1:Ah

jb:fun_5
jb:fun_jack_5
jb1:Av

jb:fun_5
jb:fun_jack_5
jb1:Al

jb:fun_5
jb:fun_jack_5
jb1:Aj

jb:fun_5
jb:fun_jack_5
jb1:Ax

我想添加for循环=>喜欢

首先它将使用file1 =>中的单词,就像Ag =>尝试在 文件2 =>如果找到匹配项,则应将匹配的那两行以上写入新的文本文件=> demo.txt

我的代码

for j in file1
do
  sr=`grep -i -B2 '$j' file2` 
  echo $sr>>demo.txt  
done

但是上面的代码不起作用=>建议我

预期输出: 在文件2 =>上面两行匹配中发现的Ag匹配应该被打印

类似输出:

=======================
jb:fun_0       # 1st line
jb:fun_jack_0  # 2nd line
jb1:Ag         # => match found
=======================
jb:fun_1       # 1st line
jb:fun_jack_1  # 2nd line
jb1:Ab         # => match found
=======================

应该打印出如何匹配两行以上的输出

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

grep -wFB2 -f file2 file1 > demo.txt

grep选项的详细信息:

  • -w仅匹配完整单词:寻找Avoid时避免匹配Av
  • -B2除匹配行外还输出前两行
  • -f file2从file2读取模式
  • -F这些模式是用换行符分隔的纯文本,而不是正则表达式

您可以try it here