coreutils マニュアルによると
tsortは、入力をスペースで区切られた文字列のペアとして読み取り、部分ソートを表します。出力は、指定された部分ソートに対応するフルソートです。例えば
tsort <<EOF a b c d e f b c d e EOF
出力を生成します
a b c d e f
「tsortが入力を文字列のペアとして読み取る」とは何を意味し、入力の要件は何ですか?この例では、最初の行a b c
自体は意味がありませんが、andがペアであるa
ため、b
andもペアにc
なりますd
。
なぜこれがうまくいかないのですか?
$ tsort <<EOF
> a b c
> b c d e
> EOF
tsort: -: input contains an odd number of tokens
ベストアンサー1
はい、tsortはスペース(新しい行を含む)で区切られたペアで入力を読み取ります。
したがって、tsort文書の例は次のとおりです。
tsort <<EOF
a b c
d
e f
b c d e
EOF
次の整列ペアを定義します。
- a < b
- c<d
- 電子<f
- b<c
- d <電子
これらを合わせると a < b < c < d < e < f のソートになり、この場合は完全なソートになります。
ソースコードを読むと、tsortが使用していることが確認されました。gnulibのreadtoken()区切り記号のセットを含みます。スペース、タブ、改行つまり空白です。
(対応するtsortの例の私の最初の説明は次のとおりです。その他の質問、行はb c d e
b<c、c<d、d<e の 3 つの暗黙のペアを生成しますが、そうではなく、すべてのスペースは改行を含めて同じように解釈され、一度に 1 ペアずつ読み取られます。 )