我有一个文件:
Bin674 chr04 32.003 32.09
Bin671 chr04 31.612 31.632
并提交b:
Bin670 Chr04 31.553 31.612
Bin671 Chr04 31.612 31.632
Bin672 Chr04 31.632 31.673
Bin673 Chr04 31.673 32.003
Bin674 Chr04 32.003 32.09
Bin675 Chr04 32.09 32.159
Bin676 Chr04 32.159 32.196
我想打印Bin673
行和Bin675
行以及Bin671
行和Bin672
行
只是,文件中的行是上一行和下一行:
怎么写shell?
答案 0 :(得分:1)
嗯,这会给你你想要的东西。我把文件名称作为a和b。现在,读取文件a并获取第一个单词,然后打印文件b中匹配单词的上一行和下一行。
for word in $(< a awk '{split($0, word, " "); print word[1]}'); do out=$(grep "$word" -A1 -B1 b | grep -v "$word"); echo "$out"; done
答案 1 :(得分:0)
您可以使用grep Bin673 -A1 -B1 b
-An
在匹配后显示n
行-Bn
在匹配前显示n
行示例:
$ grep Bin673 -A1 -B1 b
Bin672 Chr04 31.632 31.673
Bin673 Chr04 31.673 32.003
Bin674 Chr04 32.003 32.09
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed -r 's:^(\S+\s).*:/\\n\1/{p;n;p}:' patternFile | sed -ne 'N' -f - dataFile
将花样文件转换为sed脚本,并在第二行使用两行匹配的窗口,然后打印以下行。