我有以下问题:
我有一个名为fruits.txt的巨大文件,如下所示:
>apple
dslksdlksdlsdksdsdlkdlsdksdsdsdk
ksdlsdlskdlsdklsdksdlksdlkdlksdk
>orange
sakalksalksalksalksalksalksalsak
dslksdlksdlsdksdsdlkdlsdksdsdsdk
ksdlsdlskdlsdklsdksdlksdlkdlksdk
dslksdlksdlsdksdsdlkdlsdksdsdsdk
ksdlsdlskdlsdklsdksdlksdlkdlksdk
>pineapple
sakalksalksalksalksalksalksalsak
dslksdlksdlsdksdsdlkdlsdksdsdsdk
ksdlsdlskdlsdklsdksdlksdlkdlksdk
我想要的水果列表出现在 list.txt 中,如下所示:
>orange
>apple
>pineapple
>etc.
我想要做的是 grep “list.txt”中包含的所有单词,这些单词可以出现在fruits.txt 中,并放入 result.txt 文件中,该文件应如下所示:
>orange
sakalksalksalksalksalksalksalsak
dslksdlksdlsdksdsdlkdlsdksdsdsdk
ksdlsdlskdlsdklsdksdlksdlkdlksdk
dslksdlksdlsdksdsdlkdlsdksdsdsdk
ksdlsdlskdlsdklsdksdlksdlkdlksdk
不幸的是我已经尝试过了
fgrep -f list.txtfruits.txt
但结果只是每个水果的第一个泳道),例如:
orange
所以我尝试使用以下命令:
sed -n -e '/orange/,/>/ p' fruits.txt | sed '$d' > results.txt
它可以工作...但一次只能输入一个条目...
我的想法是用 list.txt 替换 '/orange/
。
我尝试将其放入“for 循环”中,但不起作用。
你们有什么帮助吗?
最佳答案
试试这个 awk 一行:
awk 'NR==FNR{a[$0];next}/^>/{f=$0 in a}f{print > "results.txt"}' list.txt fruits.txt
然后检查生成的results.txt。
关于bash - 将 sed 放入 "for cycle",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17469917/