Объединение двух файлов и уникальное в новом файле

У меня есть два файла с несколькими аналогичными столбцами один, два и третий столбцы с небольшим изменением и несколькими другими столбцами следующим образом.

файл 1:

AT1 AT22 24 1 ATAGATA ATTATAT AT2 AT24 22 0 ATAGATA ATTATAT AT3 AT23 263 3 ATAGATA ATTATAT AT4 AT28 252 6 ATAGATA ATTATAT 

Аналогично в файле 2:

 AT1 AT22 22 1 ATAGATA ATTATAT AT3 AT23 265 1 ATAGATA ATTATAT AT4 AT28 253 1 ATAGATA ATTATAT 

Выход должен быть Union и уникальным из этих файлов с релаксацией + или -2 третьего столбца, и если первые три совпадают с этими критериями, четвертый столбец должен быть добавлен из обоих файлов, а другой должен быть напечатан как обычно, как

 AT1 AT22 24 2 ATAGATA ATTATAT AT2 AT24 22 0 ATAGATA ATTATAT AT3 AT23 263 4 ATAGATA ATTATAT AT4 AT28 252 7 ATAGATA ATTATAT 

2 Solutions collect form web for “Объединение двух файлов и уникальное в новом файле”

 awk ' NR==FNR { a[$1,$2] = $3 val[$1,$2] = $4 next } ($1,$2) in a { for (n=$3-2; n<=$3+2; n++) if (a[$1,$2] == n) { $4+=val[$1,$2] break } } {print} ' file2 file1 
 AT1 AT22 24 2 ATAGATA ATTATAT AT2 AT24 22 0 ATAGATA ATTATAT AT3 AT23 263 4 ATAGATA ATTATAT AT4 AT28 252 7 ATAGATA ATTATAT 

Это должно делать то, что вы просили (насколько работают мои тестовые примеры)

 #!/bin/bash # Concatenating the 2 files and sorting entries SRC=`cat file1 file2 | sort ` FLAG="OFF" i=1 while read abcde do # Need an initial array to start comparing if [ "$i" -eq "1" ];then init_vals=( "$a" "$b" "$c" "$d" "$e" ) FLAG="ON" else # Start comparing vals=( "$a" "$b" "$c" "$d" "$e" ) if [[ ${vals[0]} == "${init_vals[0]}" && ${vals[1]} == "${init_vals[1]}" ]] then # First and second column are identical, checking in delta on third meet the requirements delta=`expr ${vals[2]} - ${init_vals[2]}` if [ "$delta" -ge "-2" -a "$delta" -le "2" ] then # It does, adding values on column 4 and keeping other columns sum_col4=`expr ${vals[3]} + ${init_vals[3]}` vals=( "${init_vals[0]}" "${init_vals[1]}" "${init_vals[2]}" "$sum_col4" "${init_vals[4]}" ) #This is a tracker, we don't print result until conditions are not met FLAG="ON" else #Delta on column 3 is not met FLAG="OFF" fi else #Column 1 and 2 are different FLAG="OFF" fi # echo "$FLAG" if [[ $FLAG != "ON" ]];then echo ${init_vals[@]} FLAG="ON" fi init_vals=( "${vals[@]}" ) fi (( i++ )) done <<< "$SRC" #Printing last lastline echo ${init_vals[@]} 
  • Как я могу запускать две команды параллельно и завершать их, если ОДИН из них завершается с кодом выхода 0?
  • Проверьте входящий поток на пустые пространства и переместите его
  • цепочка терминальных команд, каждая из которых выполняется, если файл существует
  • Требуется специальная проверка сценария оболочки
  • Как создать загрузочную флешку для «efi-shell»
  • Прочитайте вывод команды в переменной
  • Найти все старые версии на основе версии в имени файла
  • Если имя файла имеет более n символов, удалите последние
  • Удалить предложение автозавершения zsh
  • SSH Agent-Forwarding работает, но как насчет sudo -u username no shell / permissions? композитор
  • Как переместить некоторые, но не все файлы из одного каталога в другой?
  • Interesting Posts

    Я не могу войти как root с командой su, но я могу с SSH

    SSH дважды и запустить команду, экранируя символ?

    Основные шаги по разработке API-интерфейса python в среде Unix

    Создать «функцию» для запуска bash?

    для задачи цикла, обнаруживать файл с размером и копией независимо от имени

    Как добавить datetime в существующее имя файла в Linux?

    Как переместить файл в каталог в текущий рабочий каталог без переименования?

    находить и копировать файлы, используя список входных данных и частичные пути к файлам

    Помогите установить беспроводной драйвер Ralink RT3070 на kali?

    Будет ли `cat ~ / foo *> ~ / results / output.txt` сохранять порядок` ~ / foo * `?

    Как далеко вы можете пойти с rm -rf / как root

    mkisofs не может найти файл

    Использование find для поиска символических ссылок, указывающих на определенный шаблон файлов

    systemd застрял при установке зашифрованного тома

    Почему некоторые программы (например, readlink) не могут вводить данные из канала?

    Linux и Unix - лучшая ОС в мире.