Я уверен, что есть команда awk
, которая может это сделать, я недостаточно квалифицирован в awk
, чтобы найти решение. А пока вы можете использовать что-то вроде этого:
#!/bin/bash
csplit -z tosplit /661/ {*}
for file in xx*; do
newName=$(egrep -o '2[0-9]{7}' $file)
mv $file $newName.txt
done
rm -rf xx*
Где tosplit
- это этот файл (ваш примерный файл):
661###############20160315###
###########################
###########################
661###############20160316###
###########################
661###############20160317###
###########################
После запуска этого скрипта (в том же каталоге, что и tosplit
файл) Я получаю три файла:
ls 2016031*
20160315.txt 20160316.txt 20160317.txt
... выглядящих так:
cat 20160315.txt
661###############20160315###
###########################
###########################
cat 20160316.txt
661###############20160316###
###########################
cat 20160317.txt
661###############20160317###
###########################
Вы можете (?) Использовать csplit
для именования файлов, но это тоже выше моей зарплаты !