首页 > 解决方案 > 如何在使用 awk 不匹配时添加行结果“non_assigned”?

问题描述

当我在输入文件 (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} 但即使存在门结果,我也会得到输出“non_assigned”。

标签: linuxbashawk

解决方案


像这样?:

$ grep phylum file || echo "non assigned" 

在文件中找到时输出:

phylum  555280  Discosea

当没有找到时:

non assigned

在 awk 中相同:

$ awk '/phylum/&&found=1;END{if(!found)print "non assigned"}'

推荐阅读