【问题标题】:grep results: how to format output file with one result for each linegrep 结果:如何格式化输出文件,每行一个结果
【发布时间】:2021-06-25 01:07:51
【问题描述】:

我正在用 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”标签。

谢谢。

【问题讨论】:

  • 因为您需要\r\n 才能在记事本中查看换行符。
  • 在输出中使用unix2dos 插入“缺失的”\r
  • 是的,unix2dos 解决了这个问题,谢谢。

标签: bash file grep output


【解决方案1】:

经过一些调整后,使用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

【讨论】:

    【解决方案2】:
    sed s'@ACCESSION@%ACCESSION@'g accession_out.txt | tr '%' '\n' > acc2.txt
    mv acc2.txt accession_out.txt
    

    添加回车非常棘手。 AFAIK、tr 和 ed 是仅有的两个可以做到这一点的实用程序。过去可以使用八进制来处理这些事情,但这是一种深奥的魔法,几乎没有人可能知道了。

    【讨论】:

    • Microsoft Word 输出显示该文件包含\n 字符并且缺少\r。您正在添加一个额外的\n。添加'\r'不需要很深的魔法,可以使用unix2dos等简单的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多