【问题标题】:How to keep only certain numbers in a giant number in bash?如何在bash中仅将某些数字保留在一个巨大的数字中?
【发布时间】:2017-07-10 01:37:27
【问题描述】:

我有一个包含基因型的巨大文件。基本上,一行是一个基因座(或 SNP)和一列(所有数字连接在一起形成一个巨大的数字,但在一列中对齐的一个数字是 1 个个体。在这个例子中,我有 96 个数字连续所以96 人)。这是一个例子:

921212922222222212292222229222221222211222222222222219929222292222922229919922222222222222292292
929111221111111221191211222912222221111210229921222129929222291221921219929992122122222211292299
292222922212222122292222222222921122222222921219222222912222299199922222912222222222221222292229
222222221122122922122222112212212221222122221922999229222229222212992221222222221222222222222212
222222222292212221291112192222122121922122222122229212222221212212922221222122122912222922222111
222222921222222922292222122222922222229222122291299122922222229222922229229222219222292222122222

我只想在此处保留某些“列”,但由于它是一个数字,因此我需要将其剪切,将其放在不同的列中并将所有内容连接起来以具有相同的格式,但需要我需要的 2 列。

例如,如果我选择第 1 列和第 3 列,最终结果应该是:

91
99
22
22
22
22

我试过了(上面的数据在 output.geno 中):

cat ~/Desktop/output.geno| awk '{ print $1 $3}'
echo ~/Desktop/output.geno | grep -o ""

如果你想玩,这里有一个玩具数据集:

echo "921212922222222212292222229222221222211222222222222219929222292222922229919922222222222222292292
929111221111111221191211222912222221111210229921222129929222291221921219929992122122222211292299
292222922212222122292222222222921122222222921219222222912222299199922222912222222222221222292229
222222221122122922122222112212212221222122221922999229222229222212992221222222221222222222222212
222222222292212221291112192222122121922122222122229212222221212212922221222122122912222922222111
222222921222222922292222122222922222229222122291299122922222229222922229229222219222292222122222" > ~/Desktop/output.geno

【问题讨论】:

    标签: bash unix awk cut


    【解决方案1】:

    你可以使用cut:

    cut -c 1,3 output.geno
    

    给予:

    91
    99
    22
    22
    22
    22
    

    【讨论】:

      【解决方案2】:

      试试:

      awk '{print $1$3}' FS= output.geno
      

      相当于:

      awk 'BEGIN{FS=""}{print $1$3}' output.geno
      

      您需要将FS(字段分隔符)设置为空

      【讨论】:

        【解决方案3】:

        @M。 Beausoleil,@Try(虽然还没有测试过):

        awk '{print substr($0,1,1) substr($0,3,1)}'   Input_file
        

        简单,取出第1位和第3位,打印出来。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-06-21
          • 1970-01-01
          • 1970-01-01
          • 2022-11-27
          • 1970-01-01
          • 2022-11-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多