0

我被这个问题困住了。使用 Bash,我们必须检查 .txt 文件是否显示了两列的数据,如果没有,则必须清空注释。数据是一个txt文件,如下:

#pacId  locusName   Best-hit-arabi-name arabi-defline
23158591    Lus10000002.g   AT1G75330.1 ornithine carbamoyltransferase
23170978    Lus10000003.g   AT1G14540.1 Peroxidase superfamily protein

我必须清空没有“Best-hit”和“arabi-defline”列的注释

我正在考虑做一些脚本来读取每一行,但我不知道检查列是否为空的代码是什么。

谢谢你的协助 !

4

1 回答 1

0

我必须清空没有“Best-hit”和“arabi-defline”列的注释

我假设你的意思是:

我必须删除不包含 and 值的Best-hitarabi-defline

因此,如果是这种情况,这里有一个简单的解决方案awk

awk '{if ($3 && $4){print $0}}' test.txt

我认为awkbash在这种情况下更合适,但你也可以使用 bash 来做到这一点:

while read -r pacId locusName bHAN aD; do [[ $bHAN && $aD ]] && echo "${pacId} ${locusName} ${bHAN} ${aD}"; done < test.txt

当然,如果您想通过任何空白以外的其他内容更改默认分隔符,您可以IFS像这样覆盖:

while IFS='\t' read -r pacId locusName bHAN aD; do [[ $bHAN && $aD ]] && echo -e "${pacId}\t${locusName}\t${bHAN}\t${aD}"; done < test.txt

同样的事情awk,你只需要使用-F来更改默认分隔符。

于 2020-12-30T15:06:00.187 回答