распечатайте первую строку тех файлов в текущей директории, которые имеют последнюю строку с шаблоном

Ваши требования логически противоречивы. Учитывая ввод типа gitploy up -t 2.0.0 test_repo , вам необходимо проанализировать параметры и, в частности, обратить внимание на наличие параметра -t и тот факт, что он принимает один аргумент. , чтобы определить, что первым аргументом, не являющимся опцией, является test_repo .

Итак, сначала проанализируйте параметры в обычном режиме. Тогда вы сможете узнать, что такое первый операнд. В этот момент обрабатывает параметры. Сохраните необходимую информацию о параметрах в переменных.

action="$1"
shift
unset t_arg
while getopts "zhvdurqw:c:i:e:o:b:t:f:p:g" opt; do
  case "$opt" in
    c) c_arg="$OPTARG";;
    …
  esac
done
shift "$((OPTIND-1))"
root_arg="$1"

if [ -n "${c_arg+1}" ]; then
  queue_callback "$OPTARG"
  echo "$root_arg was here"
fi
3
22.12.2018, 19:35
2 ответа

что-то вроде этого?

for f in *.logs; do tail -n 1 -- "$f" | grep -q vanished && { printf '%s: ' "$f"; head -n 1 -- "$f"; }; done

Вы также можете сделать это с помощью awk, но это будет менее эффективно, если файлы большие, потому что вам придется читать весь файл, а не только начало и конец.

4
27.01.2020, 21:12

Если вы хотите сделать это с помощью awk, только это может привести вас в правильном направлении:

for f in *.log; do awk 'NR==1{ first_line=$0 } END { last_line=$0; print( last_line ~ /varnished/) ? "File: " FILENAME "\n" first_line : "" }' "$f"; done

Цикл for, вероятно, не обязателен, но это самый эффективный способ, который я смог найти с помощью awk

И благодаря комментариям ниже, теперь мы можем позволить gawkсделать свою работу следующим образом:

gawk 'FNR==1 {first = $0} ENDFILE {if($0 ~ /varnished/) print substr(FILENAME,3) ":", first}'./*.log 

В последних системах Linux awkявляется символической ссылкой на gawk. Например, в последних выпусках Fedora дело обстоит именно так :

.
# ls -l /bin/awk 
lrwxrwxrwx. 1 root root 4 Jul 13 07:55 /bin/awk -> gawk
3
27.01.2020, 21:12

Теги

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