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
awk
andを経たくない場合(そして、この単純なコマンドラインを解釈するsort
ために追加のシェルを実行したくない場合)、次のことを実行できます。awk
sort
{
sed '/[^[:blank:]]/!q'
sort
} < file
ここでuitsは、空白以外の文字()を含まsed
q
ない最初の行を探します。!
3行目をsed 3q
uitに変更します。q
入力が検索できない場合(パイプからのものなど)、対応する行sed
区切り文字の後のファイルにカーソルを保持することはできません。これはsort
、読み取った可能性がある追加データが欠落していることを意味しますsed
(たとえば、パイプから読み取った場合)。より大きな塊が入ります)。
GNU実装を使用すると、読み過ぎることを避けるために、入力を一度に1バイトずつ読み取るオプションをsed
追加できます。-u
答え2
これにより、ソートされた名前のリストが提供されます。
sed '1,/^$/d' <THANKS.txt | sort
パイプは、sed
最初の行から最初の空の行まですべての項目を削除し、残りはソートに渡すsort
ために使用されます。/^$/
より簡単な場合は、上記またはこの回答の他のコマンドで正規表現アドレスの代わりに空行の行番号を使用することもできます。
ファイルの初期部分を渡すことができます。
sed '1,/^$/!d' <THANKS.txt
d
このコマンドは、デフォルトでコマンド条件を反転してsed
名前リストを抽出する代わりに削除します。
これら2つのコマンドを一緒に使用すると、問題全体を解決し、THANKS-sorted.txt
出力ファイルを作成できます。
{ sed '1,/^$/!d' <THANKS.txt; sed '1,/^$/d' <THANKS.txt | sort; } >THANKS-sorted.txt
またはより良い形式を使用してください。
{
sed '1,/^$/!d' <THANKS.txt
sed '1,/^$/ d' <THANKS.txt | sort
} >THANKS-sorted.txt
ed
編集者と一緒に:
printf '%s\n' '1,/^$/ p' '+,$ w !sort' 'q' | ed -s THANKS.txt >THANKS-sorted.txt
これはed
次の編集スクリプトを使用します。
1,/^$/ p
+,$ w !sort
q
この編集スクリプトは、最初の空行まで最初の数行を出力します。その後、空白行の次の行から文書の終わりまでのすべての行を記録して、ソートされたsort
名前を出力します。
エディタは最終的にq
終了し、最終リダイレクトは結果テキストを作成しますTHANKS-sorted.txt
。
答え3
head
コマンドが閉じられない場合(stdin
Linuxではない)、次のことを試してください。
{ head -n2; sort; } < file
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
Bill Natt
David Brook
Peter Williamson
stdinが閉じている場合は、head
次のようにしてください。
{ read TMP; echo "$TMP"; read TMP; echo "$TMP"; sort; } < file
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
Bill Natt
David Brook
Peter Williamson