bash - 将 sed 放入 "for cycle"

标签 bash for-loop sed grep

我有以下问题:

我有一个名为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/

相关文章:

bash - 将状态(文件完整性)检查添加到 cbr cbz 转换 bash 脚本

linux - 如何从输入文件读取路径

php - 循环遍历动态输入框并插入mysql数据库

python - 在 awk 中解析数据

shell - 使用 sed 或 grep 替换行中的子字符串

linux - 使 bash 脚本多线程

bash - Google Colab 脚本抛出 "Transport endpoint is not connected"

java - 如何求数组中的最大值和最小值

java - 具有多个条件的 for 循环

perl - 如果模式在多段内匹配,如何加入多行