Text-Processing
對文件中的某些行進行排序
一、總結
我不明白,如何在文件的某些位置而不是所有文件中對行進行排序。
如果有可能以任何免費方法解決此任務,那就太好了。
2.設置
1.文件結構
我有一個大 (19 MB) 文件
SashaMillionaire.md
,有一個遊戲的問題。它由重複的塊組成。每個塊有 10 行。文件結構(使用 PCRE 正則表達式)Millionaire \d{18} QUESTION.* .* .* .* .* .* .* .* Millionaire \d{18} QUESTION.* .* .* .* .* .* .* .*
SashaMillionaire.md
除了 10 行塊之外,沒有其他行和文本。它沒有空行和行數大於或小於 10 的塊。2. 文件範例內容
Millionaire 123456788763237476 QUESTION|2402394827049882049 Who is the greatest Goddess in the world? Sasha Kristina Sasha Katya Valeria AuthorOfQuestion Millionaire 459385734954395394 QUESTION|9845495845948594999 Where Sasha live? Novgorod St. Petersburg Kazan Novgorod Chistopol Another author Millionaire 903034225025025568 QUESTION|ABC121980850540445C Another question. Katya Sasha Kazan Chistopol Katya Unknown author
- 預期行為
我需要按字母順序對第 6-9 行進行排序,然後對 16-19、26-29 等進行排序。
但沒有排序其他行。
結果應該是這樣的:
Millionaire 123456788763237476 QUESTION|2402394827049882049 Who is the greatest Goddess of the world? Sasha Katya Kristina Sasha Valeria 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 Sasha Kazan Unknown author
4.沒有幫助
- Google搜尋
- 我發現,Unix 命令
sort
,sed
並且awk
可以解決類似的任務,但我沒有發現,如何使用這些命令來解決我的任務。
假設每個部分都以 text 開頭
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
要就地修改文件,請將 print 語句替換
1,$p
為w
ex SashaMillionaire.md << 'EOF' :g/^Millionaire$/+5,+8 sort :wq EOF
或者,如果您更喜歡單行而不是heredoc,
printf ':g/^Millionaire$/+5,+8 sort\nwq\n' | ex SashaMillionaire.md