Объединить текстовые файлы с 1-м столбцом и разницей в выходном файле

[115384]Я только что написал это в качестве комментария, но я думаю, что это также может помочь ответить на ваш вопрос для [115898]./configure[115899] части. [12230]Существует важная разница между Windows и linux в том, что касается поиска команды для выполнения.[12231]В Windows, текущий каталог всегда рассматривается первым в PATH w/o, фактически находящемся там.[12232]В linux (ну по крайней мере, bash) текущий каталог не находится в PATH, если только вы явно не поместили его туда. [12233]Когда вы набираете имя в командной строке Windows, например [115900]zip[115901], он сначала ищет текущую директорию для этой команды (используя некоторые специфические правила о расширениях для определения того, что является исполняемым файлом, на который на самом деле может ссылаться [115902]zip[115903]), если он находит соответствующий исполняемый файл, он выполняет его, в противном случае он просматривает каждую директорию, перечисленную в переменной окружения PATH. [12234]В типичной командной строке оболочки linux, ввод команды работает аналогично EXCEPT, что имя без компонента пути можно найти, только посмотрев в каталогах, перечисленных в переменной окружения PATH. Кроме того, как было сказано в другом ответе, linux не заботится о расширениях для определения типа файла, так что если вы не наберете расширение как часть имени, оно не будет найдено, поэтому многие файлы не имеют расширений). [12235]Это означает, что в оболочке linux, если вы наберете [115904]configure[115905] путь будет искать исполняемый файл с именем configure[115906], но если текущий каталог не находится в этом пути, файл [115907]configure` в этом каталоге не будет найден и не будет выполнен.[12236]Так как у вас часто бывают файлы, которые вы хотите выполнить в каталоге, который не находится в этом пути, вы можете запустить его, указав ему компонент пути в командной строке. Так как [115908].[115909] относится к текущей директории, вы можете использовать относительный путь для настройки в текущей директории, набрав [115910]./configure[115911]. Если вы хотите запустить команду [115912] configure[115913], которая была в подкаталоге [115914] build[115915] текущей директории, вы набираете [115916] build/configure[115917].[12238] Вы можете добавить текущую директорию (как [115918].[115919]) к вашему пути в linux, но это считается плохой идеей, смотрите [115920] Безопасно ли добавлять . к моему PATH? Почему? [12239]
2
06.10.2016, 14:18
1 ответ

Используйте join и awk вместе:

join -t $'\t' -j 1 -a 1 -a 2 -e 0 -o 0,1.2,0,2.2 file1 file2 | \
  awk 'OFS="\t"{$5=$2-$4}NR==1{$5="Difference"}1'

Где:

  • -t устанавливает разделитель ввода и вывода
  • -j определяет поле соединения в обоих файлах
  • -a принудительно объединяет для печати несопоставленных строк из обоих файлов
  • -e указывает, как заполнять пустые поля
  • и -o выходной формат
  • awk сначала устанавливает разделитель выходных полей OFS на вкладку
  • 5-е поле $ 5 вычисляется из 2-го и 4-го
  • и если это первая строка в файле, отформатируйте 5-е поле как заголовок
1
27.01.2020, 22:20

Теги

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