Как отсортировать разделы файла по алфавиту?

это работает в bash

cert="first"
web="second"
declare -A assoc_array=(["cert"]="${cert}" ["web"]="${web}")
echo "first is" ${assoc_array[cert]}
echo "second is" ${assoc_array[web]}

ИЛИ

#loop
for i in "${assoc_array[@]}"
do
   echo "$i"
done

Нет необходимости использовать eval afaik

2
18.06.2020, 09:52
2 ответа

Использование GNU sedиsort:

sed 's/^$/\x0/g' file | sort -z | tr '\0' '\n'
  • Вставить нулевой символ в пустую строку
  • sortиспользование нулевого символа в качестве разделителя(-z)
  • наконец, замените нулевой разделитель новой строкой, используя tr.
  • чтобы удалить пустые строки в первой и последней строке вывода, вы можете добавить| sed '1{/^$/d};${/^$/d}'

Выход:

string2
x
z
y
f
string

string5
z
y
x
string

(возможно, кто-то может помочь заставить \x0работать для не -GNU sed, связанного вопроса)

4
18.03.2021, 23:26

Использование GNU awkв режиме абзаца и сортировка значений массива в строковом режиме, а затем печать:

awk -v RS= '{ seen[NR]=$0 }
END { PROCINFO["sorted_in"]="@val_str_asc";
      for (block in seen) {print sep seen[block]; sep=ORS}
}' infile
3
18.03.2021, 23:26

Теги

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