если столбцы, которые вы имеете в виду и известны, разделены пробелом, вы можете сделать следующее:
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
просто используйте sort -u file[12].txt >output.txt
. который сортирует ввод при удалении дубликатов.
убедитесь, что ваши файлы имеют формат новой строки типа Unix (LF\n
)вместо формата новой строки Dos/Windows (CRLF\r\n
); если нет , преобразуйте их командой tr -d $'\r' <filename
или dos2unix filename
.