This is a test version of Biostars. For the public version, visit https://www.biostars.org.
How to remove all characters after a specific pattern?

I have a big table like 'df', I would like to remove all value after first ':' for each row.

I have tried :

cat df.bed | cut -f1 -d":" | head and cat df.bed |sed 's/:.*//' | head but they removed all columns after first ':' .

df:

rs1006501   T   A   0/0:14,0:14:42:0,42,596    A    0/0:5,0:5:15:0,15,177
rs1006502   NA  NA  NA                         C,T  ./.
rs1015190   NA  NA  NA                         T    1/1:0,2:2:6:75,6,0
rs10164686  G   A   0/0:1,0:1:3:0,3,46          NA  NA

desired output:

rs1006501   T   A   0/0    A    0/0
rs1006502   NA  NA  NA     C,T  ./.
rs1015190   NA  NA  NA     T    1/1
rs10164686  G   A   0/0   NA    NA
linux rna-seq awk sed

I'd try to replace all instances of <TAB><SOMETHING_MINIMAL_WITH_NO_TABS>:<SOMETHING_GREEDY_WITH_NO_TABS> with <TAB><SOMETHING_MINIMAL_WITH_NO_TABS>. And would do it in perl rather than sed, because sed is pretty ugly when matching on tabs.

2 answers

Try this:

sed 's/:[^\t]*//g' df.bed
awk -F$'\t' -v OFS="\t" '{split($4,fourth,":");split($6,sixth,":");print $1,$2,$3,fourth[1],$5,sixth[1]}' df.bed

Log in to answer this question.