2

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
Stephen Rauch
  • 47,830
  • 31
  • 106
  • 135
M. Beausoleil
  • 3,141
  • 6
  • 29
  • 61

3 Answers3

3

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

Juan Diego Godoy Robles
  • 14,447
  • 2
  • 38
  • 52
3

You can use cut:

cut -c 1,3 output.geno

Gives:

91
99
22
22
22
22
Stephen Rauch
  • 47,830
  • 31
  • 106
  • 135
1

@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.

RavinderSingh13
  • 130,504
  • 14
  • 57
  • 93