tsort: -: 入力に奇数個のトークンが含まれています。

tsort: -: 入力に奇数個のトークンが含まれています。

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ため、bandもペアに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 eb<c、c<d、d<e の 3 つの暗黙のペアを生成しますが、そうではなく、すべてのスペースは改行を含めて同じように解釈され、一度に 1 ペアずつ読み取られます。 )

おすすめ記事