Проблема со ссылкой на рабочий каталог в цикле сценария оболочки

Использование comm для отсортированных данных:

$  comm <( sort -n file1 ) <( sort -n file2 )
                1
                2
2
                3
5
        6

Этот вывод разделен табуляцией. Мы можем пометить все в столбцах 1 и 2 как «NoMatch», а в столбце 3 как «Match» с awk :

$ comm  <( sort -n file1 ) <( sort -n file2 ) |
  awk -F$'\t' 'BEGIN { OFS="," } $3 { print $3, $3, "Match"; next } { print $1, $2, "NoMatch" }'
1,1,Match
2,2,Match
2,,NoMatch
3,3,Match
5,,NoMatch
,6,NoMatch

Сценарий awk будет читать ввод, разделенный табуляцией ([ -F $ '\ t' ) и используйте запятые в качестве разделителя выходного поля ( OFS = "," ). Если что-то есть в поле 3, оно будет выводить это дважды с Match в третьем поле и продолжит со следующей строки. В противном случае он будет выводить поля 1 и 2 из ввода вместе с NoMatch в третьем поле.

1
09.02.2019, 02:50
2 ответа

Это можно было бы сделать намного проще, объединив findс тем фактом, что вам не нужно создавать архив, если вы сжимаете только один файл:

find $LOGPATH/ -name \*.log -mtime 1 -execdir bzip2 "{}" \;

Если в вашем findнет -mtime, вы можете подделать его, используя touchдля создания файла (e. г.$DATEFILE)с конкретным последним -измененным временем, скажем, «полночь сегодня», а затем используйте:

find $LOGPATH/ -name \*.log -not -newer /path/to/$DATEFILE -execdir bzip2 "{}" \;
rm /path/to/"$DATEFILE"
2
27.01.2020, 23:33

Безусловно, самый простой способ — использовать инструмент, который уже есть во FreeBSD для этого-newsyslog.

Создайте файл /etc/newsyslog.confили отредактируйте существующий. Вы указываете имя файла (вы можете использовать подстановочные знаки, хотя вам может понадобиться несколько строк для разных каталогов ), сколько обратных копий вы хотите сохранить (очень большое число в вашем случае ), когда прокручивать файл (есть флаг, позволяющий вам сделать это самостоятельно ), какую систему сжатия вы хотите использовать и т. д.

Используйте newsyslog -FvC path-to-your-log-fileдля запуска в первый раз.

Кстати, вы можете просто поместить соответствующие строки в
/usr/local/etc/newsyslog.conf.d, в файле с любым именем. Это немного облегчает запоминание после обновлений.

0
27.01.2020, 23:33

Теги

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