Сортировка некоторых строк в файле

Чтобы восстановить данные в подобной ситуации, вам почти наверняка придется раскопать свои резервные копии. К несчастью.

1
28.06.2017, 14:07
2 ответа

Предполагая, что каждый раздел начинается с текста Millionaire, вы сможете сделать это с помощью vim/ex-либо в интерактивном режиме, либо в сценарии, например, так:

$ ex SashaMillionaire.md << 'EOF'
:g/^Millionaire$/+5,+8 sort
:1,$p
:q
EOF

Millionaire
123456788763237476
QUESTION|2402394827049882049
Who is the greatest Goddess in the world?
Саша
Валерия
Катя
Кристина
Саша
AuthorOfQuestion
Millionaire
459385734954395394
QUESTION|9845495845948594999
Where Sasha live?
Novgorod
Chistopol
Kazan
Novgorod
St. Petersburg
Another author
Millionaire
903034225025025568
QUESTION|ABC121980850540445C
Another question.
Katya
Chistopol
Katya
Kazan
Sasha
Unknown author

Чтобы изменить файл на месте -, замените оператор печати 1,$pнаw

ex SashaMillionaire.md << 'EOF'
:g/^Millionaire$/+5,+8 sort
:wq
EOF

или, если вы предпочитаете один вкладыш -вместо настоящего документа,

printf ':g/^Millionaire$/+5,+8 sort\nwq\n' | ex SashaMillionaire.md
3
27.01.2020, 23:18

С помощью awkвы можете сделать что-то вроде:

awk '
  $0 == "Millionaire" {
    if (n < 0) {
      close("sort")
      print last
    }
    n = 4
  }
  n > 0 {
    n--
    print
    next
  }
  n-- {print last | "sort"}
  {last = $0}
  END {
    if (n < 0) {
      close("sort")
      print last
    }
  }'

Для сортировки строк от четвертой после Millionaireдо второй перед следующей Millionaire.

1
27.01.2020, 23:18

Теги

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