【发布时间】:2020-10-20 23:44:38
【问题描述】:
当我在输入文件 (input.txt) 的一行上运行命令 (COMMAND) 时,我会得到一个相关的结果,其中只有一行是有趣的,总是从世界门开始。
例如:
superkingdom 2759 Eukaryota
clade 554915 Amoebozoa
phylum 555280 Discosea
order 313555 Himatismenida
family 313556 Cochliopodiidae
所以我跑了:
for p in $(cat input.txt)
do COMMAND $p | grep "\bphylum\b" >> results.txt
done
为了在我的文件 result.txt 中包含所有行,例如:
phylum 555280 Discosea
但是,有时 grep 没有结果(没有以 phylum 开头的行),它不会在 results.txt 中添加任何行。例如,我想为这些特定情况添加一些带有“0”或“未分配”的行(因此 input.txt 的每一行都与 results.txt 匹配)。
clade 2696291 Ochrophyta
class 5747 Eustigmatophyceae
order 425074 Eustigmatales
family 425072 Monodopsidaceae
我已尝试添加 | awk print '{print $0"non_assigned"}' ,不成功。
你有什么想法可以帮助我吗?一位成员建议我使用 awk '/phylum/{print $0}!/phylum/{print "non_assigned";exit} 但即使存在 phylum 结果,我也会得到输出“non_assigned”。
【问题讨论】:
-
awk '/phylum/{print $0}!/phylum/{print "non_assigned"}' -
不幸的是,当我使用你的命令时,我仍然没有任何输出
-
你需要删除
grep并且只使用awk -
我不知道为什么它被关闭了,但这会起作用:
for p in $(<input.txt); do (COMMAND $p | grep -w "phylum") || echo "non_assigned"; done >> results.txt请注意,重定向已移至done; 之后。现在使用>而不是>>可能会更好。 -
非常感谢@JonathanLeffler,它运行良好!