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

У меня есть два файла, что мне нужно сделать, это найти общие строки на основе столбца1 в обоих файлах, и если совпадение будет записано в новый файл col1 (общий между двумя файлами) file1col2 и file2col2

file1:

col1 file1col2 10:100000525-100001560(+) 0.971465226620556 10:100001724-100002618(+) 0.940918504451204 10:100002725-100002970(+) 0.946592696189412 10:100003104-100004184(+) 0.736305487299153 10:100004450-100005051(+) 0.70823022283736 10:100005158-100005876(+) 0.969728923411704 10:100006075-100007551(+) 0.855411430976336 10:100007764-100009009(+) 0.274219271261146 10:100009146-100011362(+) 0.927057564779308 10:100011583-100011887(+) 0.883431738847249 

file2

 col1 file2col2 10:100000525-100001560(+) 0.943385996874889 10:100001724-100002618(+) 0.981929023174133 10:100002725-100002970(+) 0.955549170283206 10:100003104-100004184(+) 0.736440826679551 10:100004450-100005051(+) 0.689045711238636 10:100005158-100005876(+) 0.964995337925152 10:100006075-100007551(+) 0.873411848029685 10:100007764-100009009(+) 0.37719743446494 10:100009146-100011362(+) 0.943862343124518 10:100011583-100011887(+) 0.902915705720447 

желаемый выход

 col1(common between two files) file1col2 file2col2 10:100000525-100001560(+) 0.971465227 0.943385997 10:100001724-100002618(+) 0.940918504 0.981929023 10:100002725-100002970(+) 0.946592696 0.95554917 10:100003104-100004184(+) 0.736305487 0.736440827 10:100004450-100005051(+) 0.708230223 0.689045711 10:100005158-100005876(+) 0.969728923 0.964995338 10:100006075-100007551(+) 0.855411431 0.873411848 10:100007764-100009009(+) 0.274219271 0.377197434 10:100009146-100011362(+) 0.927057565 0.943862343 10:100011583-100011887(+) 0.883431739 0.902915706 

  • Как отображать строки 2-4 после каждого результата grep?
  • "Egrep: empty (sub) expression" при попытке отфильтровать слова из списка
  • Контекст соответствующего регулярного выражения
  • Печать полной свободной памяти из `free -m`
  • используйте find и grep, чтобы найти строки, содержащие некоторую строку и не содержащие другую строку из файлов
  • Как положить $ @ в кавычки?
  • Как использовать регулярное выражение BRE или ERE для соответствия шаблону, который не имеет определенной строки
  • Пустой файл без grep, впоследствии обрабатывающий его как двоичный файл
  • One Solution collect form web for “сопоставлять и печатать несколько столбцов из двух файлов”

    join + awk :

     join --header file1 file2 | awk 'NR>1{ $2=sprintf("%1.9f",$2); $3=sprintf("%.9f",$3) }1' > result.txt 

     cat result.txt col1 file1col2 file2col2 10:100000525-100001560(+) 0.971465227 0.943385997 10:100001724-100002618(+) 0.940918504 0.981929023 10:100002725-100002970(+) 0.946592696 0.955549170 10:100003104-100004184(+) 0.736305487 0.736440827 10:100004450-100005051(+) 0.708230223 0.689045711 10:100005158-100005876(+) 0.969728923 0.964995338 10:100006075-100007551(+) 0.855411431 0.873411848 10:100007764-100009009(+) 0.274219271 0.377197434 10:100009146-100011362(+) 0.927057565 0.943862343 10:100011583-100011887(+) 0.883431739 0.902915706 

    Детали :

    • join --header option – обрабатывать первую строку в каждом файле как заголовки полей, печатать их, не пытаясь их соединить

    • NR>1 – начать обработку со второй записи ( NR – номер текущей записи), т.е. – пропустить строку заголовка

    • sprintf("%1.9f",$2) – аргумент формата $2 (второй столбец) как число с плавающей запятой с 9 знаками после запятой

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