n行の後にファイルの内容を並べ替える方法は?

n行の後にファイルの内容を並べ替える方法は?

Linuxでは、sortコマンドを実行してファイルの内容を並べ替えることができますが、私の場合は次のファイル(THANKS.txt)があります。

These people have contributed to OSN Envoy. We always try to keep this list updated and correct. 
If you notice that your name is not listed here, then feel free to contact us.

Ar Rakin
Peter Williamson
David Brook
Bill Natt

このファイルには、ソフトウェアプロジェクトに貢献した人のリストが含まれています。

コマンドを使用して名前をアルファベット順にソートしたいと思います。sortどんなアイデアがありますか?

ベストアンサー1

そしてawk

awk '
  NR == 1, NF == 0 {
    # print and skip all lines until the first blank
    # one (one where the Number of Fields is 0)
    print; next
  } 

  {print | "sort"} # pass the rest to sort
  ' < file

最初の空白行の代わりに3行目で停止するNF == 0ように変更します。NR == 3

awkandを経たくない場合(そして、この単純なコマンドラインを解釈するsortために追加のシェルを実行したくない場合)、次のことを実行できます。awksort

{
  sed '/[^[:blank:]]/!q'
  sort
} < file

ここでuitsは、空白以外の文字()を含まsed qない最初の行を探します。!3行目をsed 3quitに変更します。q

入力が検索できない場合(パイプからのものなど)、対応する行sed区切り文字の後のファイルにカーソルを保持することはできません。これはsort、読み取った可能性がある追加データが欠落していることを意味しますsed(たとえば、パイプから読み取った場合)。より大きな塊が入ります)。

GNU実装を使用すると、読み過ぎることを避けるために、入力を一度に1バイトずつ読み取るオプションをsed追加できます。-u

おすすめ記事