如何在 bash 的巨型数字中只保留某些数字?
How to keep only certain numbers in a giant number in bash?
我有一个包含基因型的大文件。基本上,一行是一个基因座(或 SNP)和一列(所有数字连接在一起形成一个巨大的数字,但一列中的一个数字对齐是 1 个。在这个例子中,我连续有 96 个数字,所以96 个人)。这是一个例子:
921212922222222212292222229222221222211222222222222219929222292222922229919922222222222222292292
929111221111111221191211222912222221111210229921222129929222291221921219929992122122222211292299
292222922212222122292222222222921122222222921219222222912222299199922222912222222222221222292229
222222221122122922122222112212212221222122221922999229222229222212992221222222221222222222222212
222222222292212221291112192222122121922122222122229212222221212212922221222122122912222922222111
222222921222222922292222122222922222229222122291299122922222229222922229229222219222292222122222
我只想保留某些 "columns here",但由于它是一个数字,我需要将其剪切,将其放在不同的列中,然后将所有内容连接起来以具有相同的格式,但我使用的是 2 列需要。
例如,如果我 select 第 1 列和第 3 列,最终结果应为:
91
99
22
22
22
22
我试过了(上面的数据在output.geno):
cat ~/Desktop/output.geno| awk '{ print }'
echo ~/Desktop/output.geno | grep -o ""
如果你想玩这个,这里有一个玩具数据集:
echo "921212922222222212292222229222221222211222222222222219929222292222922229919922222222222222292292
929111221111111221191211222912222221111210229921222129929222291221921219929992122122222211292299
292222922212222122292222222222921122222222921219222222912222299199922222912222222222221222292229
222222221122122922122222112212212221222122221922999229222229222212992221222222221222222222222212
222222222292212221291112192222122121922122222122229212222221212212922221222122122912222922222111
222222921222222922292222122222922222229222122291299122922222229222922229229222219222292222122222" > ~/Desktop/output.geno
尝试:
awk '{print }' FS= output.geno
相当于:
awk 'BEGIN{FS=""}{print }' output.geno
您需要将 FS
(字段分隔符)设置为空
您可以使用 cut
:
cut -c 1,3 output.geno
给出:
91
99
22
22
22
22
@M。 Beausoleil,@Try(虽然还没有测试过):
awk '{print substr([=10=],1,1) substr([=10=],3,1)}' Input_file
简单,取出第1位和第3位打印出来
我有一个包含基因型的大文件。基本上,一行是一个基因座(或 SNP)和一列(所有数字连接在一起形成一个巨大的数字,但一列中的一个数字对齐是 1 个。在这个例子中,我连续有 96 个数字,所以96 个人)。这是一个例子:
921212922222222212292222229222221222211222222222222219929222292222922229919922222222222222292292
929111221111111221191211222912222221111210229921222129929222291221921219929992122122222211292299
292222922212222122292222222222921122222222921219222222912222299199922222912222222222221222292229
222222221122122922122222112212212221222122221922999229222229222212992221222222221222222222222212
222222222292212221291112192222122121922122222122229212222221212212922221222122122912222922222111
222222921222222922292222122222922222229222122291299122922222229222922229229222219222292222122222
我只想保留某些 "columns here",但由于它是一个数字,我需要将其剪切,将其放在不同的列中,然后将所有内容连接起来以具有相同的格式,但我使用的是 2 列需要。
例如,如果我 select 第 1 列和第 3 列,最终结果应为:
91
99
22
22
22
22
我试过了(上面的数据在output.geno):
cat ~/Desktop/output.geno| awk '{ print }'
echo ~/Desktop/output.geno | grep -o ""
如果你想玩这个,这里有一个玩具数据集:
echo "921212922222222212292222229222221222211222222222222219929222292222922229919922222222222222292292
929111221111111221191211222912222221111210229921222129929222291221921219929992122122222211292299
292222922212222122292222222222921122222222921219222222912222299199922222912222222222221222292229
222222221122122922122222112212212221222122221922999229222229222212992221222222221222222222222212
222222222292212221291112192222122121922122222122229212222221212212922221222122122912222922222111
222222921222222922292222122222922222229222122291299122922222229222922229229222219222292222122222" > ~/Desktop/output.geno
尝试:
awk '{print }' FS= output.geno
相当于:
awk 'BEGIN{FS=""}{print }' output.geno
您需要将 FS
(字段分隔符)设置为空
您可以使用 cut
:
cut -c 1,3 output.geno
给出:
91
99
22
22
22
22
@M。 Beausoleil,@Try(虽然还没有测试过):
awk '{print substr([=10=],1,1) substr([=10=],3,1)}' Input_file
简单,取出第1位和第3位打印出来