Osx
按行組對文件進行排序
如果我的文件內容類似於:
FirstSection Unique first line in first section Unique second line in first section SecondSection Unique first line in second section Unique second line in second section ... NthSection Unique first line in Nth section Unique second line in Nth section
是否可以使用 unix 命令(例如 sort、awk)按每三行組中的第一個非縮進行按字母順序對文件進行排序,同時將縮進行保留在其現有組下?
使用 Perl,您可以按照以下方式執行:
- 啜食文件 (
perl -0n
)- 用不縮進的行分割輸入
split(/^(?=\S)/m)
- 排序和列印
perl -0ne 'print sort split(/^(?=\S)/m) ' ex
首先 sed 將每個部分放在一行上,使用文本
<EOL>
作為部分行之間的分隔符。然後我對這些部分進行排序並使用第二個 sed 將每個部分<EOL>
恢復為換行符。sed -r ':r;$!{N;br};s:\n([[:blank:]])(\1*):<EOL>\1\2:g' file|sort|sed -r '/^$/d;:l;G;s:(.*)<EOL>(.*)(\n):\1\3\2:;tl;$s:\n$::'
我沒有選擇字元作為分隔符,因為輸入文件可能有它,所以我
<EOL>
改用了。**輸出:**我在每個部分(除了最後一個部分)之後添加了一個換行符,以重新創建輸入文件的樣式。
FirstSection Unique first line in first section Unique second line in first section NthSection Unique first line in Nth section Unique second line in Nth section SecondSection Unique first line in second section Unique second line in second section