source multiple файлов и вывести один файл

Можно передать текст по каналу в fold -s -w 72 получить тот результат.

Если Ваша система не имеет fold но установили Python, можно сделать:

cat /var/tmp/li.txt | cat /var/tmp/li.txt | python -c "import sys; from textwrap import fill; print fill(sys.stdin.read(), width=72)"
3
14.07.2015, 15:25
5 ответов

Вы можете сделать:

$ awk -F= '{l[$1]=$0};END{for (i in l) print l[i]}' conf1 conf2
custom='1000'
last='star'
name='john'

Обратите внимание, что порядок строк на выходе не гарантируется (на основе того, как AWK хранит массив внутри хэш-таблица) , но настройки в CONF2 будут переопределять те, которые в CONF1 .

Где

  • AWK -F = ... CONF1 CONF2 Вызовите awk с = в качестве сепаратора на файлах CONF.
  • {l [$ 1] = $ 0} Определение хранения каждого VAR, новейшие превосходные предрешенные
  • {...} в конце (после обработки файлов)
  • I в L) петля для всех var,
  • печатает l [i] и распечатайте его.
3
27.01.2020, 21:22

Подход Perl:

$ perl -F= -lane '$k{$F[0]}=$F[1]; END{print "$_=$k{$_}" for keys(%k)}' conf1 conf2 
last='star'
name='john'
custom='1000'

Это та же идея, что и ответ Стефана. Он создает хеш, где имя переменной является ключом, и его значение является значением. Затем, как только все файлы будут обработаны, он печатает пары ключа / значения. Обратите внимание, что порядок строк не гарантируется, и может изменяться между вызовами, но значения CONT2 всегда будут переопределять аналогичные из CONT1 .

0
27.01.2020, 21:22

для CONF2 принять приоритет, он должен предшествовать CONT1 в сортировке ARGS.

sort -suk1,1 -t= conf2 conf1 | tac

Выход:

name='john'
last='star'
custom='1000'

Вышеуказанное зависит от того факта, что этикетки пользовательские , в последний раз и имя сортируют соответствующим образом для вашего требуемого выхода. Однако, когда этикетки иначе называют, то этот мод будет работать:

eval srx=\" 's/^'{name/1,last/2,custom/3}'=&/;' \"   # sort seq: 1,2,3,etc
sort -suk1,1 -t= conf2 conf1 | sed "$srx" | sort -n | cut -d= -f2-    
0
27.01.2020, 21:22

Итак, вопрос в производительности - как использовать ядра наиболее эффективно?

Если бы у вас больше ничего на этой коробке не было, я бы пошел с простой и простой установкой - хотя я не друг, чтобы положить все на одну коробку. Почти ничего не сравнимого с бегом «родной». Как сказал @ Benjamin B.: Docker - это уровень виртуализации с очень низкими накладными расходами. Но если у вас нет причин виртуализировать, я бы не стал делать это с такой простой настройкой. Это добавляет по крайней мере дополнительные организационные накладные расходы для проекта.

Лучше ли создать единую операционную систему и настроить компоненты, которые я описал эффективно, или создать несколько виртуальных машин и позволить каждой машине использовать ее ядро?

Почему это должно быть лучше? Скажем, вы запускаете Ubuntu на коробке и устанавливаете виртуальные машины с Ubuntu: почему Guest-Ubuntu должен вести себя иначе, чем обычная установка?

Операционные системы созданы для эффективного управления ресурсами, поэтому выполнение всего на простой установке должно сделать трюк.

Виртуализация интересна, если вы планируете легко вращать вверх и вниз экземпляры/услуги; или если вам нужны более тонкие уровни изоляции.

Но, поскольку это ваш единственный ящик, вы в порядке с простой установкой.

ОТ: Зачем использовать apache и nginx?

-121--217192-

Попробуйте использовать текущую версию smartmontools . Если ваш диск по-прежнему не поддерживается, есть процедура, описанная где-то на их сайте для сбора параметров SMART вашего диска и отправки их разработчикам. Если вы отправите им эти параметры, они могут добавить поддержку для вашего диска в какой-то момент. Будьте осторожны, что игра с этими параметрами сама по себе может привести к постоянному повреждению диска.

-121--244086-

Можно использовать join для объединения двух файлов и заповедников порядка ключей. Вот пример:
conf1 :

name='john'
last=''
custom='1000'
rule='default'

conf2 :

name='joe'
second='none'
fourth='dash'
last='star'
rule='whatever'

при запуске

{ { join -t= -1 2 -2 1 -o 1.1 1.2 2.2 <(sort -t= -k2,2 <(nl -ba -nrz -s= conf1)) \
<(sort -t= -k1,1 conf2); join -t= -1 2 -2 1 -v1 -o 1.1 1.2 1.3 \
<(sort -t= -k2,2 <(nl -ba -nrz -s= conf1)) <(sort -t= -k1,1 conf2); \
} | sort -k1,1n | cut -d= -f2-; join -t= -1 1  -2 2 -v2 -o 2.1 2.2 2.3 \
<(sort -t= -k1,1 conf1) <(sort -t= -k2,2 <(nl -ba -nrz -s= conf2)) \
| sort -k1,1n | cut -d= -f2-; } > merged_conf

содержимое merged _ conf будет:

name='joe'
last='star'
custom='1000'
rule='whatever'
second='none'
fourth='dash'

Может быть, легче понять, если работать с двумя временными файлами. Сначала n нумеруйте l ines в conf1 и conf2 и сортируйте их по 2 nd поля:

sort -t= -k2,2 <(nl -ba -nrz -s= conf1) >conf1.sorted
sort -t= -k2,2 <(nl -ba -nrz -s= conf2) >conf2.sorted

выше создается conf1.sorted :

000003=custom='1000'
000002=last=''
000001=name='john'
000004=rule='default'

и conf2.sorted :

000003=fourth='dash'
000004=last='star'
000001=name='joe'
000005=rule='whatever'
000002=second='none'

Теперь та же команда использует исходные файлы и нумерованные/отсортированные файлы:

{ { join -t= -1 2 -2 1 -o 1.1 1.2 2.2 conf1.sorted <(sort -t= -k1,1 conf2); \
join -t= -1 2 -2 1 -v1 -o 1.1 1.2 1.3 conf1.sorted \
<(sort -t= -k1,1 conf2); } | sort -k1,1n | cut -d= -f2-; \
join -t= -1 1  -2 2 -v2 -o 2.1 2.2 2.3 <(sort -t= -k1,1 conf1) conf2.sorted \
| sort -k1,1n | cut -d= -f2-; } > merged_conf

Пояснение:

join -t= -1 2 -2 1 -o 1.1 1.2 2.2 conf1.sorted <(sort -t= -k1,1 conf2)

объединяет файлы на основе поля 2 из conf1.sorted и поля 1 из conf2 печати общих строк, но со значениями ( 2,2 ) из conf2 :

000002=last='star'
000001=name='joe'
000004=rule='whatever

и

join -t= -1 2 -2 1 -v1 -o 1.1 1.2 1.3 conf1.sorted <(sort -t= -k1,1 conf2)

печатает непиарные линии из conf1.sorted :

000003=custom='1000'

они сгруппированы {..} , и выходной сигнал направляется в sort -k1,1n | cut -d = -f2- для восстановления порядка ключей из исходного conf1 :

name='joe'
last='star'
custom='1000'
rule='whatever'

затем

join -t= -1 1  -2 2 -v2 -o 2.1 2.2 2.3 <(sort -t= -k1,1 conf1) conf2.sorted

соединяется на основе поля 1 из conf1 и поля 2 из conf2.сортировано печать непарьерных строк из последнего:

000003=fourth='dash'
000002=second='none'

в том же способе выходной сигнал направляется в sort -k1,1n | cut -d = -f2- для восстановления порядка ключей из исходного conf2 :

second='none'
fourth='dash'

Группирование всех вышеперечисленных элементов приводит к требуемому результату:

name='joe'
last='star'
custom='1000'
rule='whatever'
second='none'
fourth='dash'

затем он перенаправляется ( > ) в объединенный _ conf . Наконец, удалите отсортированные файлы:

rm conf{1,2}.sorted

Это можно повторить для дополнительных файлов конфигурации, используя merged _ conf и eg conf3 в качестве аргументов и так далее...

1
27.01.2020, 21:22

Используйте это:

name=${name:-John}
last=${last:-}
custom=${custom:-1000}

... и аналогично в другом файле. Прочитайте ручную страницу вашей оболочки. Это установит переменные в указанные значения, если они не будут уже установлены и не нулевые. Неважно, какой заказ вы истощаете файлы, по крайней мере, не с примерами данных, которые вы показали.

-1
27.01.2020, 21:22

Теги

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