закройте одинарную кавычку, в которую вы помещаете регулярное выражение, измените одинарную кавычку и снова откройте ее
$ echo "a'b" | sed 's/'\''/X/'
aXb
$ echo "aXb" | sed 's/X/'\''/'
a'b
Я пришел к этому с учетом новой информации
awk -F'[ =-]' '{ print $0" "$6-$5 | "sort -k4nr" }' fileA | \
cut -d' ' -f1-3 | \
awk -F'[ =]' '!seen[$3]++'
Выход:
>ENST00000366955.7 gene=WASP12 CDS=169-9511
>ENST00000423485.5 gene=PTP2 CDS=160-4752
>ENST00000367142.4 gene=PRPF40B CDS=304-1032
Это, безусловно, можно сделать с помощью одной команды awk
, но я все еще учусь ее использовать.
Учитывая минимальное значение, скажем, 700 (, соответствующее выходным данным вашего образца ), вы можете попробовать это:
awk -F'[=-]' '$4-$3 > 700' fileA
Выход:
>ENST00000423485.5 gene=PTP2 CDS=160-4752
>ENST00000367142.4 gene=PRPF40B CDS=304-1032
>ENST00000366955.7 gene=WASP12 CDS=169-9511
-F'[=-]'
:используйте =
и -
в качестве разделителей столбцов, что приводит к столбцам 3 и 4:
1 526
138 579
1 81
160 4752
304 1032
169 9511
$4-$3 > 700
:Выберите строки, в которых столбец 4 минус столбец 3 больше 700.
Предполагая, что диапазоны всегда представлены на положительной цепочке и никогда в противоположной ориентации, и предположив, что столбцы в исходном файле разделены одинарными пробелами,
$ awk -F '[ =-]' '{ k = $3; r = $6 - $5 } (m[k] == "" || m[k] < r) { d[k] = $0; m[k] = r } END { for (k in d) print d[k] }' file
>ENST00000366955.7 gene=WASP12 CDS=169-9511
>ENST00000367142.4 gene=PRPF40B CDS=304-1032
>ENST00000423485.5 gene=PTP2 CDS=160-4752
Это обрабатывает данные как строки с полями, разделенными пробелами, =
и -
. Таким образом, длина диапазона находится путем вычитания 6-го поля из 5-го поля. Максимальный такой диапазон для любого имени гена хранится в массивеm
(для «максимум» ), а соответствующие строки хранятся в массивеd
(для «данные» ).
В конце выводятся собранные данные в d
.
Код awk
с более приятным форматированием:
BEGIN { FS = "[ =-]" }
{
k = $3
r = $6 - $5
}
(m[k] == "" || m[k] < r) {
d[k] = $0
m[k] = r
}
END {
for (k in d) print d[k]
}