Основываясь на этом вопросе Group files and pipe to awk commandПолучить первые и последние файлы в месяц
У меня есть набор файлов, как это: -
-rw-r--r-- 1 root root 497186 Apr 21 13:17 2012_03_25
-rw-r--r-- 1 root root 490558 Apr 21 13:17 2012_03_26
-rw-r--r-- 1 root root 488797 Apr 21 13:17 2012_03_27
-rw-r--r-- 1 root root 316290 Apr 21 13:17 2012_03_28
-rw-r--r-- 1 root root 490081 Apr 21 13:17 2012_03_29
-rw-r--r-- 1 root root 486621 Apr 21 13:17 2012_03_30
-rw-r--r-- 1 root root 490904 Apr 21 13:17 2012_03_31
-rw-r--r-- 1 root root 491788 Apr 21 13:17 2012_04_01
-rw-r--r-- 1 root root 488630 Apr 21 13:17 2012_04_02
На основании ответа в связанном вопросе у меня есть сценарий с следующий код, который отлично работает: -
DIR="/tmp/tmp"
for month in $(find "$DIR" -maxdepth 1 -type f | sed 's/.*\/\([0-9]\{4\}_[0-9]\{2\}\).*/\1/' | sort -u); do
echo "Start awk command for files $month"
power=$(awk -F, '{ x += $1 } END { print x/NR }' "$DIR/${month}"_[0-3][0-9])
echo $power
done
следующая команда на его собственной возвращает список, как это: -
find /tmp/tmp -maxdepth 1 -type f | sed 's/.*\/\([0-9]\{4\}_[0-9]\{2\}\).*/\1/' | sort -u
2011_05
2011_06
2011_07
2011_08
2011_09
2011_10
2011_11
2011_12
2012_01
2012_02
2012_03
2012_04
Команда find передает набор файлов с использованием GLOB-AWK для обработки в виде пакета.
Исходя из этого, я хочу, чтобы иметь возможность запускать следующую вырезать команды
head -1 FirstFile | date -d "`cut -d, -f7`" +%s
tail -1 LastFile | date -d "`cut -d, -f7`" +%s
Они должны быть запущены для первого и последнего файла PER SET
Так что для 2012_03 выше, глава должен быть запущен для файла 2012_03_25, и хвост должен быть запущен для 2012_03_31, так как это первый и последний файлы в наборе для марта.
Так что в основном я должен иметь возможность получить ПЕРВЫЙ и ПОСЛЕДНИЙ файл PER BATCH.
Надеюсь, я сделал это достаточно ясно, если не прокомментирую.
Мне нравится это решение, но я получаю «Перенаправление неожиданный» при использовании <<() идиома. Я использую стандартную Debian Squeeze. –
@generalexception: Какая оболочка? Я предполагаю, что это не Bash, ksh или zsh, чтобы это могло дать вам ошибку. Вместо этого вы можете попробовать '<<< $()' (здесь-строка с подстановкой команд), но это может сбой, если замена процесса не работает. Вы также можете попробовать здесь-doc. См. Мой отредактированный ответ для примера. –
Его не оболочка, потому что команда awk возвращает дату в виде строки в формате ГГГГ/ММ/ДД ЧЧ: ММ: СС, она назначает ГГГГ/ММ/ДД на $ start, ЧЧ: ММ: от СС до конца и следующий YYYY/MM/DD до $ power. Пробел в этой задаче вызывает проблему. –