Как объединить текстовые файлы — сценарий Bash

Если программа, которую вы хотите установить, соответствует рекомендациям, вы можете установить ее с помощью

./configure
make
make install

./configureпроверяет, соответствует ли ваша система всем требованиям, и настраивает параметры установки. makeвсе компилирует, а make installкопирует все нужные файлы в нужные места. Вы не хотите делать последний шаг вручную, потому что будет довольно утомительно размещать все библиотеки, справочные страницы и прочее в нужном месте.

Вы также можете указать, где должны быть установлены пакеты. Например, если вы хотите установить пакет в свой домашний каталог (, потому что, например. у вас нет прав администратора ), вы можете использовать

./configure --prefix="$HOME"/somefolder

make installзатем установит его в эту папку. Однако обычно вам это не понадобится.

2
10.12.2019, 16:56
2 ответа

В чистом bash это можно сделать с помощью файлового дескриптора.

file1="$1"; file2="$2"
__print() {
  [[ $1 ]] && { printf '1: %s\n' "$1"; }
  [[ $2 ]] && { printf '2: %s\n' "$2"; }
}
if [[ $file1 ]] && [[ $file2 ]]; then
    while true; do
      read -r f1 <&3 || break
      read -r f2 <&4 || break
      __print "$f1" "$f2"
    done 3<"${file1}" 4<"${file2}"
else
    echo "Usage: '$0 <file1> <file2>'"
fi

Вы получите следующий результат:

1: 01_01_01
2: 02_01_01
2: 02_01_02
1: 01_02_01
1: 01_02_02
2: 02_02_01
1: 01_02_03
2: 02_03_01
1: 01_03_01
2: 02_03_02
1
27.01.2020, 22:08

Вы можете сделать это с помощью grep POSIX для разных оболочек и реализаций:

grep -v '^\s*$' file1 file2 file...

Для двух файлов на основе вашего ввода вывод будет:

file1:01_01_01
file1:01_02_01
file1:01_02_02
file1:01_02_03
file1:01_03_01
file2:02_01_01
file2:02_01_02
file2:02_02_01
file2:02_03_01
file2:02_03_02

вы можете использовать sedи sortдля дальнейшего форматирования.

В сценарии:

#!/bin/sh
grep -v '^\s*$' "$@"
1
27.01.2020, 22:08

Теги

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