grep 结果:如何格式化每行一个结果的输出文件

grep results: how to format output file with one result for each line

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

grep 'ACCESSION' chrom_CDS_2.txt | awk '{print [=11=]'\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' 标签。

谢谢。

sed s'@ACCESSION@%ACCESSION@'g accession_out.txt | tr '%' '\n' > acc2.txt
mv acc2.txt accession_out.txt

添加回车 returns 非常棘手。据我所知,tr 和 ed 是仅有的两个可以做到这一点的实用程序。过去可以将八进制用于此类事情,但这是一种深奥的魔法,几乎没有人知道。

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

grep 'ACCESSION' chrom_CDS_2.txt | awk '{print [=10=] "\r"}' > accession_out.txt

当你使用awk时,你不需要grep:

awk '/ACCESSION/ {print [=11=] "\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