Учитывая, что Вы специально просили решение проблемы:
awk -F\" '$4 !~ /eprints.ulster.ac.uk\/view/' file > newfile
-121--195342- Попробуйте
<application name="emacs*" class="Emacs*" type="normal">
<position force="yes">
<x>0</x>
<y>0</y>
</position>
<size>
<height>600</height>
<width>1024</width>
</size>
<decor>no</decor>
<maximized>no</maximized>
</application>
< высота >
и < ширина >
должны находиться в тэге < размер >
.
Из примера конфигурации Openbox
<position force="no">
# the position is only used if both an x and y coordinate are provided
# (and not set to 'default')
# when force is "yes", then the window will be placed here even if it
# says you want it placed elsewhere. this is to override buggy
# applications who refuse to behave
<x>center</x>
# a number like 50, or 'center' to center on screen. use a negative number
# to start from the right (or bottom for <y>), ie -50 is 50 pixels from
# the right edge (or bottom). use 'default' to specify using value
# provided by the application, or chosen by openbox, instead.
<y>200</y>
<monitor>1</monitor>
# specifies the monitor in a xinerama setup.
# 1 is the first head, or 'mouse' for wherever the mouse is
</position>
<size>
# the size to make the window.
<width>20</width>
# a number like 20, or 'default' to use the size given by the application.
# you can use fractions such as 1/2 or percentages such as 75% in which
# case the value is relative to the size of the monitor that the window
# appears on.
<height>30%</height>
</size>
-121--114122- я не могу найти документацию для подтверждения или отклонения, но помните, что записи cron не являются сценариями оболочки. Я предполагаю, что логический или не разрешен. Добавьте логику, чтобы предотвратить несколько экземпляров (что, как я полагаю, является причиной использования pgrep) в сценарии, или создайте сценарий-оболочку, который будет запланирован в cron.
Suponiendo que tiene un espacio en blanco como delimitador:
$ while read -r id pos; do awk -v id="$id" -v pos="$pos" '$1 == id && pos > $4 && pos < $5 { print gensub(/.*gene=([A-Za-z0-9]*).*/, "\\1", 1) }' <file2; done <file1
LOC102908761
Rftn1
LOC102913870
while read -r id pos; do FOO; done <file1
:esto lee file1
línea por línea y coloca el primer campo (p.NW_006502347.1
)en la variable de shell $id
, y el segundo campo (, p.316684
)en la variable de shell $pos
. Luego ejecuta FOO
para cada línea. awk -v id="$id" -v pos="$pos" 'BAR' <file2
:para cada línea de file1
, ejecutaremos un comando awk
que ejecutará BAR
. Esto buscará file2
para las partes coincidentes. Necesitamos decirle a este script awk
las dos variables "externas" del shell. es decir, a la variable awk id
se le asigna el mismo valor que a la variable de shell $id
, y lo mismo para la variable awk pos
y la variable de shell $pos
. $1 == id && pos > $4 && pos < $5
:esta es la parte "condicional" del script awk
. Si se cumplen estas condiciones, se ejecutarán los siguientes comandos. Aquí, estamos comprobando si el primer campo $1
de file2
es el mismo que el id
de la línea actual de file1
, Y si pos
está entre el 4 $4
y el 5 $5
campos de file2
. { print gensub(/.*gene=([A-Za-z0-9]*).*/, "\\1", 1) }
:si se cumplen las condiciones anteriores, se ejecutará este código. Queremos hacer una sustitución con gensub
primero. Esto busca gene=
seguido de una cadena alfanumérica de cualquier longitud ([A-Za-z0-9]*)
. Esta cadena alfanumérica es (
capturada )
por los paréntesis. También "buscaremos" todos los caracteres antes y después .*
de la cadena completa gene=([A-Za-z0-9]*)
. Por lo tanto, esto "busca" la línea completa, que se reemplaza con el (primer y único )grupo de captura "\\1"
, es decir, la cadena alfanumérica después de gene=
. El final 1
significa reemplazar la primera aparición, aunque esto no tiene mucho sentido, ya que asumo que solo habrá una coincidencia de gene=
por línea. Prefiero usar archivos delimitados por tabuladores -en general, especialmente para lo que supongo que es un archivo GFF/GTF. Esto permite diferenciar entre espacios, especialmente en el campo 9.
while IFS=$'\t' read -r id pos; do awk -F'\t' -v id="$id" -v pos="$pos" '$1 == id && pos > $4 && pos < $5 { print gensub(/.*gene=([A-Za-z0-9]*).*/, "\\1", 1) }' <file2.tsv ; done <file1.tsv
Las modificaciones al script están dividiendo explícitamente las líneas de shell en las pestañas con IFS=$'\t'
y las líneas awk
con -F'\t'
.