Добавление моего комментария в качестве ответа, так как он ответил на ваш вопрос.
Думаю, у вас должна быть возможность загрузить архив и скомпилировать его из исходников, если это необходимо. Tarball находится по адресуhttps://ftp.gnu.org/gnu/gcc/gcc-7.1.0/
Загрузите архив, затем запустите обычный ./configure
, make
,make install
Обязательный вариант POSIX sh
:
#! /bin/sh -
ret=0
for file in [[:digit:]][[:digit:]][[:digit:]][[:digit:]]-QTR[1234].tsv; do
base=${file%.tsv}
grep 8-K < "$file" > "${base%%-*}Q${base##*-QTR}".txt || ret=$?
done
exit "$ret"
Другой вариант
for f in 200{8..9}-QTR{1..4}.tsv; do
grep "pattern" $f > $(sed "s/[-RTtsv]*//g" <<< $f)txt;
done
Пошаговое руководство :Настройте расширение, создающее список имен ваших файлов
200{8..9}-QTR{1..4}.tsv
расширяется до
2008-QTR1.tsv 2008-QTR2.tsv 2008-QTR3.tsv 2008-QTR4.tsv 2009-QTR1.tsv 2009-QTR2.tsv 2009-QTR3.tsv 2009-QTR4.tsv
и делать каждый год и квартал до настоящего времени будет
20{08..19}-QTR{1..4}.tsv
Переберите список for..do..done
, извлеките искомый шаблон из файла
grep "pattern" $f
и перенаправить на новое имя файла, сформированное путем удаления нежелательных символов с помощью sed
и добавления суффикса txt
$(sed "s/[-RTtsv]*//g" <<< $f)txt
или
$(sed "s/[-RT]*//g" <<< ${f%%.*}.txt)
Если вы хотите избежать явного цикла, существует следующее решение. Возможно, кто-то сможет улучшить его. Это выглядит примерно так.
ls -1 *.tsv | xargs -n1 -I'{}' bash -c 'f="{}";grep 8-K $f > ${f//[^0-9Q]/}.txt'
Плюсы :-Простой однослойный
Минусы :-Процесс bash запускается для каждого обрабатываемого файла
Возможно, есть подобное решение без использования bash, но я не знаю ни одного (например, eval не должен работать в этом контексте)
В ksh93/bash/zsh, с простым циклом for
и расширением параметров:
for f in *-QTR*.tsv
do
grep 8-K < "$f" > "${f:0:4}"Q"${f:8:1}".txt
done
Это запускает grep
по одному файлу за раз (, где этот список файлов генерируется из шаблона подстановочных знаков, который требует присутствия «-QTR» в имени файла, а также «.tsv» заканчивается именем файла ), перенаправляя вывод на тщательно -созданное имя файла на основе:
Q