не столь элегантное решение:
преобразовать %m%y в 100*y+m, например: 0416->1604, затем сравнить по числовому значению.
for i in Z*
do
# convert %m%y to 100*y+m
current=$((100 * $(echo "$i"|cut -c 7-8) + $(echo "$i"|cut -c 5-6)))
if [[ $current > $max ]]; then
max=$current
maxstr=$i
fi
done
echo $maxstr
Puede dividir las secciones en archivos separados y procesarlos uno -por -uno. Esto produciría outfile.1
etc.:
awk '/^␁/ { count++ } { print > "outfile." count } ' < file
O bien, podría tener awk
canalizar las secciones una -por -una a un comando:
awk 'BEGIN {command = "./script.sh"} /^␁/ { close(command) }
{ print | command } ' < file
Utilicé el SÍMBOLO literal U+2401 PARA EL INICIO DEL TÍTULO en lo anterior, ya que eso es lo que me dio el copiado -del pegado. Usaste \01
en la línea de comando xargs
, así que si eso es lo que tienes, cambia el garabato SOH al INICIO DEL TÍTULO real, \001
en el código awk
también.
También podríamos establecer RS
en el SOH, pero eso no encaja exactamente, ya que aquí tenemos el SOH al comienzo del registro, y awk
espera encontrar el separador de registro al final.
Если в исходном файле нет пустых строк (двух последовательных новых строк ), вы можете преобразовать каждую из ␁
в две новые строки с помощью sed. Это создаст файл (или поток ), который имеет пустую строку в качестве разделителя каждой записи. Затем awk (с пустым RS )способен разделить каждую "пустую строку" файлового (потока )с разделителями на "записи".
Описание может показаться сложным, но посмотрите на код:
sed 's/␁/\n\n/g' file | awk -v RS='' -vf="./script" '{print|f;close(f)}'
Если вам действительно нужно преобразовать символ со значением байта 0x01, замените ␁
на \x01
в команде sed.