Sed заменить нерегулярный образец - PullRequest
0 голосов
/ 25 июня 2019

У меня есть таблица ставок, и я должен заменить некоторые значения, соответствующие нерегулярному шаблону (т.е. 1), разделенному запятыми.в своем минимальном шаблоне он может быть 1,1, но он может пойти выше, до 10 репликации (то есть 1,1,1,1,1,1,1,1,1,1,1,1,1,1...).Я хочу сократить серию до 1.

Это пример фрейма данных:

chr5    141587227   141587466   240 *   exon    0   0   1   0   0   0   0   0   0   0   chr5:140966508-140967052    DIAPH1_23361    chr5    141505592   141505799   208 *   promoter_flanking_region    0   1   0   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 c(PCDHGA1_17708,PCDHGA2_17627,PCDHGA3_17505,PCDHGB1_17702,PCDHGA4_17576,PCDHGB2_17511,PCDHGA5_17603,PCDHGB3_17600,PCDHGA6_17551,PCDHGA7_17606,PCDHGB4_17598,PCDHGA8_17560,PCDHGB5_17553,PCDHGA9_17757,PCDHGB6_17668,PCDHGA10_17824,PCDHGB7_17671,PCDHGA11_17515,PCDHGA12_17651,PCDHGC3_17713,PCDHGC4_17790,PCDHGC5_17760)   2   2.31    81651
chr5    141587468   141588358   891 *   promoter_flanking_region    0   1   1   0   0   0   0   0   0   0   c(chr5:140966508-140967052,chr5:140967690-140967917)    DIAPH1_23361    chr5    140944575   140944811   237 *   intron  0   0   0   1,1,1,1,1,1,1,1,1,1 0   0   0   0   0   0   0   c(PCDHA1_11483,PCDHA2_56916,PCDHA3_11465,PCDHA4_11655,PCDHA5_11663,PCDHA6_11423,PCDHA7_11585,PCDHA8_11671,PCDHA9_11458,PCDHA10_56912,PCDHA11_11590,PCDHA12_56962,PCDHA13_11369,PCDHAC1_11533)   3   3.1 643220
chr5    141587468   141588358   891 *   promoter_flanking_region    0   1   1   0   0   0   0   0   0   0   c(chr5:140966508-140967052,chr5:140967690-140967917)    DIAPH1_23361    chr5    141380219   141380588   370 *   intron  0   0   0   1,1,1,1,1,1 0   0   0   0   0   0   0   c(PCDHGA1_17708,PCDHGA2_17627,PCDHGA3_17505,PCDHGB1_17702,PCDHGA4_17576,PCDHGB2_17511,PCDHGA5_17603,PCDHGB3_17600,PCDHGA6_17551)    3   3.41    207509
chr5    141587468   141588358   891 *   promoter_flanking_region    0   1   1   0   0   0   0   0   0   0   c(chr5:140966508-140967052,chr5:140967690-140967917)    DIAPH1_23361    chr5    141381619   141381892   274 *   intron  0   0   0   1,1,1,1,1,1 0   0   0   0   0   0   0   c(PCDHGA1_17708,PCDHGA2_17627,PCDHGA3_17505,PCDHGB1_17702,PCDHGA4_17576,PCDHGB2_17511,PCDHGA5_17603,PCDHGB3_17600,PCDHGA6_17551)    3   3.41    206157

sed попытка:

sed -i -r 's/\b1,\w+/1/g' file.txt
sed -i -r 's/\b\1.*/1/g' file.txt

Мой идеалвывод будет что-то вроде:

chr5    141587227   141587466   240 *   exon    0   0   1   0   0   0   0   0   0   0   chr5:140966508-140967052    DIAPH1_23361    chr5    141505592   141505799   208 *   promoter_flanking_region    0   1   0   1   c(PCDHGA1_17708,PCDHGA2_17627,PCDHGA3_17505,PCDHGB1_17702,PCDHGA4_17576,PCDHGB2_17511,PCDHGA5_17603,PCDHGB3_17600,PCDHGA6_17551,PCDHGA7_17606,PCDHGB4_17598,PCDHGA8_17560,PCDHGB5_17553,PCDHGA9_17757,PCDHGB6_17668,PCDHGA10_17824,PCDHGB7_17671,PCDHGA11_17515,PCDHGA12_17651,PCDHGC3_17713,PCDHGC4_17790,PCDHGC5_17760)   2   2.31    81651
chr5    141587468   141588358   891 *   promoter_flanking_region    0   1   1   0   0   0   0   0   0   0   c(chr5:140966508-140967052,chr5:140967690-140967917)    DIAPH1_23361    chr5    140944575   140944811   237 *   intron  0   0   0   1   0   0   0   0   0   0   0   c(PCDHA1_11483,PCDHA2_56916,PCDHA3_11465,PCDHA4_11655,PCDHA5_11663,PCDHA6_11423,PCDHA7_11585,PCDHA8_11671,PCDHA9_11458,PCDHA10_56912,PCDHA11_11590,PCDHA12_56962,PCDHA13_11369,PCDHAC1_11533)   3   3.1 643220
chr5    141587468   141588358   891 *   promoter_flanking_region    0   1   1   0   0   0   0   0   0   0   c(chr5:140966508-140967052,chr5:140967690-140967917)    DIAPH1_23361    chr5    141380219   141380588   370 *   intron  0   0   0   1   0   0   0   0   0   0   0   c(PCDHGA1_17708,PCDHGA2_17627,PCDHGA3_17505,PCDHGB1_17702,PCDHGA4_17576,PCDHGB2_17511,PCDHGA5_17603,PCDHGB3_17600,PCDHGA6_17551)    3   3.41    207509
chr5    141587468   141588358   891 *   promoter_flanking_region    0   1   1   0   0   0   0   0   0   0   c(chr5:140966508-140967052,chr5:140967690-140967917)    DIAPH1_23361    chr5    141381619   141381892   274 *   intron  0   0   0   1   0   0   0   0   0   0   0   c(PCDHGA1_17708,PCDHGA2_17627,PCDHGA3_17505,PCDHGB1_17702,PCDHGA4_17576,PCDHGB2_17511,PCDHGA5_17603,PCDHGB3_17600,PCDHGA6_17551)    3   3.41    206157

Ответы [ 2 ]

2 голосов
/ 25 июня 2019

Я думаю, вы ищете что-то вроде

sed -r 's/\b1(,1)+\b/1/g'

То есть совпадение 1, за которым следует одно или несколько вхождений ,1.

0 голосов
/ 25 июня 2019

выглядит так, как ты хочешь awk '$28=1' input-file

Но, может быть, вы хотите немного отфильтровать и сделать

awk '$28 ~ "^1(,1)*$" {$28=1} 1' input-file

Первый просто заменяет 28-й столбец на 1, а второй заменяет 28-й столбец только 1, если он соответствует регулярному выражению ^1(,1)*$

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...