Bash "Объединить" с двумя столбцами

У меня была та же проблема, и это решение помогло мне. Чтобы удалить пакет, нажмите Ctrl+Alt+F1 и войдите в систему. Затем запустите:

sudo dpkg -r virtualbox-guest-x11

Теперь перезагрузите компьютер и наслаждайтесь

0
12.12.2019, 01:03
2 ответа

Во втором файле отсутствуют строки? Я не вижу ни одного с "TG" или "AT". Насколько мне известно, joinне принимает два поля, вы просто соединяете два поля с помощью sed. Вот пример для вашего конкретного примера:

join -j 1 <(cat 1_file.txt | sed "s/ /_/") <(cat 2_files.txt | sed "s/ /_/")

1
28.01.2020, 02:38

В awk можно использовать

awk '
    NR == FNR          {f1[$1,$2] = $0; next}
    $1 SUBSEP $2 in f1 {print f1[$1,$2], $3, $4}
' 1_file.txt 2_files.txt
ChrX 129759713 A G A G
ChrX 129760010 C T C T
ChrX 129762238 C G C G
ChrX 129762448 A G A G
ChrX 129762803 A C A C
ChrX 129763441 C A C A

Для получения подробной информации о синтаксисе awk и в целом о том, как он работает, см. страницу информации об awk в Stack Overflow

Здесь:

  • NR == FNR— это то условие, которое верно только для строк первого обрабатываемого файла. В блоке мы храним каждую строку в массиве с ключами первых двух полей. См. руководство по gawk для определения значений переменных.
  • в ключе массива,использование запятой объединяет поля с помощью встроенной переменной SUBSEP(ссылка)
  • условие $1 SUBSEP $2 in f1истинно, если для строки во втором файле первое и второе поля также появились в первом файле.
1
28.01.2020, 02:38

Теги

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