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

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

файл 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[@]} 
  • mv: Нет такой ошибки в файле или каталоге, хотя каталог, безусловно, существует
  • Создание переменных и назначение значений через loop (bash)
  • Печать цветного текста с использованием скрипта
  • Почему моя команда не работает при сглаживании?
  • Сценарий оболочки с циклом for и "array"
  • как группировать информацию в первом файле на основе информации из второго файла?
  • Почему корневая оболочка по умолчанию настроена по-другому с обычной оболочкой обычного обычного пользователя?
  • Как добавить несколько запросов в команду AWK
  • Попытка сделать псевдонимы, которые открывают последний измененный файл
  • Как суммировать значения двух строк в строке в linux
  • Как определить ошибку в определенном файле при проверке контрольной суммы (какой файл имеет проблему при проверке) в сценарии оболочки
  • Linux и Unix - лучшая ОС в мире.