Поиск данных из всех файлов в папке

Я думаю, проблема связана с системой зависимостей systemd .

Похоже, что может происходить такая логика выключения :

когда два блока с зависимостью порядка между ними выключаются, применяется обратный порядку запуска . т.е. если блок настроен с помощью After = на другом блоке, первый останавливается перед вторым, если оба выключены.

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

Я попытался запустить ваш пример сценария «A», но он не запустился:

 Failed at step USER spawning /usr/bin/yes: No such process

(я тестировал на Ubuntu 16.04).

3
04.03.2017, 00:39
3 ответа

Хотя я по-прежнему предпочитаю подход awk (более разборчивый, более похожий на оболочку, более эффективный), это один случай, когда использование цикла оболочки будет работать относительно хорошо:

for file in *; do
  IFS='|' read -r x x x x x x x text x < "$file" || continue
  printf '%s\n' "$file: $text" || exit
done
2
27.01.2020, 21:15

Для передачи файлов в awk мы можем использовать оболочку globstar. -F может использоваться для определения разделителя полей, поэтому -F '|' - это то, что нам нужно. И чтобы получить только первую строку, достаточно использовать nextfile . Таким образом, мы можем сделать:

awk -F'|' '{print FILENAME,$8;nextfile}' ./*

из папки, в которой находятся файлы.

Следует отметить, что nextfile может не поддерживаться. Например, как заметил Стефан, Debian и его производные поставляются со старой версией mawk , в которой нет опции nextfile . В случае, когда вам нужно иметь более переносимый код awk, вы можете воспользоваться переменной FNR . Например:

awk -F'|' 'FNR==1{print FILENAME,$8}'  ./*
3
27.01.2020, 21:15
find . ! -name . -prune -exec test -f {} \; -exec sh -c '
   printf "%s:%s\n" "$1" "$(head -q -n 1 "$1" | cut -d\| -f8)"
' {} {} \;
0
27.01.2020, 21:15

Теги

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