используйте sed или awk для удаления строки из определенного столбца, где известны начало и конец строки

Я не уверен, действительно ли эта программа нарушена нестрогим временем. Можно использовать подтверждение.

tmpwatch проверяет файлы (рекурсивно) и удаляет те, которые старше, чем произвольное время, указанное в командной строке. На странице руководства указано, что указанное время может составлять всего 1 час.

Relatime должен обновлять файлы после> 24 часов, и не только согласно документации. Этот 24-часовой интервал жестко запрограммирован в исходном коде ядра . Это не настраивается.

0
30.04.2018, 14:24
3 ответа

Для прямого обращения к 4-му столбцу используйте следующийawkподход:

awk '{ sub(/^POS.*GINFO=/, "", $4) }1' file > new_file
  • $4-указывает на 4-е поле
  • sub(/^POS.*GINFO=/, "", $4)-заменяет подстроку, заданную шаблоном /^POS.*GINFO=, в 4-м поле
0
28.01.2020, 04:24

если столбцы, которые вы имеете в виду и известны, разделены пробелом, вы можете сделать следующее:

sed -E 's/^(([^ ]* ){3})POS=.*;GINFO=/\1/' infile

Это ^(([^ ]* ){3})совпадение начинается с начала строки ^для чего-либо *кроме пробела [^ ]до первого увиденного пробела и повторяется максимально {3}раз; Круглые скобки делают это совпадение групповым соответствием с обратной ссылкой -на \1, которую позже мы возвращаем обратно в замещающую часть s/pattern/replace/.

Это (...)POS=.*;GINFO=также соответствует POS=, за которым следует что-либо от .*до ;GINFOи будет удалено из вывода.

Для приведенных ниже выборочных данных:

1 10241 POS=rs960927773 POS=10241;VP=0x05;GINFO=DDX11L1:100287102;R5;ASP
1 POS=10241 rs960927773 POS=10241;VP=0x05;GINFO=DDX11L1:100287102;R5;ASP
POS=1 10241 rs960927773 POS=10241;VP=0x05;GINFO=DDX11L1:100287102;R5;ASP

Возвращает результат:

1 10241 POS=rs960927773 DDX11L1:100287102;R5;ASP
1 POS=10241 rs960927773 DDX11L1:100287102;R5;ASP
POS=1 10241 rs960927773 DDX11L1:100287102;R5;ASP

Версия POSIXly может быть:

sed 's/^\([^ ]* \)\([^ ]* \)\([^ ]* \)POS=.*;GINFO=/\1\2\3/' infile
0
28.01.2020, 04:24

В POSIXly sed мы можем сделать так:

sed -ne '
   #place a markholder at the beginning of the 4th field
   s/[^[:blank:]][[:blank:]]\{1,\}/&\
/3

   # perform the sub on the 4th field
   s/\nPOS=.*;GINFO=//p
'  input_file
0
28.01.2020, 04:24

Теги

Похожие вопросы