首页 > 解决方案 > grep 结果:如何格式化输出文件,每行一个结果

问题描述

我正在用 bash 中的 grep 命令解析文本文件。我想在另一个 txt 文件中打印输出。我正在使用这条线:

grep 'ACCESSION' chrom_CDS_2.txt | awk '{print $0'\n'}' > accession_out.txt

accession_out.txt 中的结果是这样的:

在此处输入图像描述

相反,如果我在 Microsoft Word 中打开 accession_out.txt,我会得到我尝试使用 bash 命令格式化的结果:

ACCESSION   AC087816
ACCESSION   AC091485
ACCESSION   AC092153
ACCESSION   AC092156
ACCESSION   AC092159
ACCESSION   AC092165
ACCESSION   AC092176
ACCESSION   AC092178
ACCESSION   AC092206
ACCESSION   AC092431
ACCESSION   AC092455
ACCESSION   AC092461
ACCESSION   AC092533 AC027148
ACCESSION   AC092567 AC040931
ACCESSION   AC092569 AC068689
ACCESSION   AC092570 AC060792
ACCESSION   AC092573 AC015764
ACCESSION   AC092575 AC018378
ACCESSION   AC092587 AC023965
ACCESSION   AC092598 AC027781
ACCESSION   AC092603 AC073396

有人可以向我解释一下如何在记事本中获得与 Word 编辑器相同的可视化效果吗?

似乎记事本忽略了 '\n' 标记。

谢谢你。

标签: bashfilegrepoutput

解决方案


经过awk一些调整后,用于解决问题是一个想法。
您需要\r(Windows 换行符)并使用双引号。

grep 'ACCESSION' chrom_CDS_2.txt | awk '{print $0 "\r"}' > accession_out.txt

使用时awk,您不需要grep

awk '/ACCESSION/ {print $0 "\r"}' chrom_CDS_2.txt > accession_out.txt

另一种可能性是使用sed:默认情况下不打印行。当ACCESSION是该行的一部分时,将完整的行替换为完整的行(&,匹配的部分),然后\r用于/p打印它。

sed -n 's/.*ACCESSION.*/&\r/p' chrom_CDS_2.txt > accession_out.txt

推荐阅读