How to keep only certain numbers in a giant number

2019-07-21 18:26发布

I have a huge file that contains genotypes. Basically, one line is a loci (or a SNP) and a column (all the numbers are concatenated together to form one giant number, but one number align in one column is 1 individual. In this example I have 96 number in a row so 96 individuals). Here is an example:

921212922222222212292222229222221222211222222222222219929222292222922229919922222222222222292292
929111221111111221191211222912222221111210229921222129929222291221921219929992122122222211292299
292222922212222122292222222222921122222222921219222222912222299199922222912222222222221222292229
222222221122122922122222112212212221222122221922999229222229222212992221222222221222222222222212
222222222292212221291112192222122121922122222122229212222221212212922221222122122912222922222111
222222921222222922292222122222922222229222122291299122922222229222922229229222219222292222122222

I want to keep only certain "columns here", but since it's one number, I would need to cut it, put it in different columns and concatenate everything to have the same format but with the 2 columns that I need.

For example, if I select column 1 and 3 the end result should be:

91
99
22
22
22
22

I've tried this (the data above is in output.geno):

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

If you want to play with that here is a toy dataset:

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

标签: bash unix awk cut
3条回答
虎瘦雄心在
2楼-- · 2019-07-21 19:00

You can use cut:

cut -c 1,3 output.geno

Gives:

91
99
22
22
22
22
查看更多
SAY GOODBYE
3楼-- · 2019-07-21 19:09

@M. Beausoleil, @Try(haven't tested it though):

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

Simple, take out the 1st and 3rd digit and print it.

查看更多
别忘想泡老子
4楼-- · 2019-07-21 19:20

Try:

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

Equivalent to:

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

You need to set FS (Field Separator) to null

查看更多
登录 后发表回答