【问题标题】:awk simple tab separation for 1 to nth column第 1 到第 n 列的 awk 简单制表符分隔
【发布时间】:2017-08-09 23:31:05
【问题描述】:

我有一个制表符分隔的文件,我想打印它的前几列。

我希望我的做法尽可能简单和可重复:

awk -F" " '{print $1,"\t" ,$2, "\t", $3}' old.bed > new.bed

但是当我尝试对新文件进行进一步分析时,我收到一条错误消息,指出该文件的格式不正确...

我检查文件的内容:

cat -A new.bed | more

chr1     3000870     3000918$
chr1     3000870     3000918$
chr1     3000872     3000920$
chr1     3000872     3000920$
chr1     3000872     3000920$

看起来很正常……

出了什么问题,我该如何避免?

【问题讨论】:

    标签: awk cat


    【解决方案1】:

    $ 不在文件中。将它们添加到显示中的是cat-A 标志。相关部分来自man cat

       -A, --show-all
              equivalent to -vET
    
       -E, --show-ends
              display $ at end of each line
    

    只需删除-A 标志,$ 将不再显示。

    此外,我不确定 awk 命令是否 100% 符合您的预期。 输出实际上不是col1 tab col2 tab col3, 但是col1 space tab space col2 space tab space col3。 这是因为print 命令中的每个, 都被替换为字段分隔符,除此之外,您还添加了制表符。 这是使列选项卡分开的简单方法:

    awk -v OFS='\t' '{print $1, $2, $3}'
    

    【讨论】:

      【解决方案2】:

      由于您的输入是制表符分隔的,您可以使用cut 作为一种简单且可重复的方法:

      cut -f 1-3 old.bed
      

      至于您的$ 问题,janos 已在his answer 中全面介绍。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-10
        • 2017-04-23
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        相关资源
        最近更新 更多