別の質問で私は尋ねました。lsを使用するときにすべての.pycファイルを隠す方法、Ignacioは次の提案をしました。
上記のように、出力は時々誤ってソートされ、正しく機能しません。
ceasarbautista@hse140:~/Desktop/Statistics/statistics/markov$ ls
README __init__.pyc markov.py matrix2graph.pyc pathfinder.pyc priority_dict.pyc spanning.py
__init__.py graph.py matrix2graph.py pathfinder.py priority_dict.py space.py vector.py
ceasarbautista@hse140:~/Desktop/Statistics/statistics/markov$ ls | grep -v '\.pyc$' | column
README graph.py matrix2graph.py priority_dict.py spanning.py
__init__.py markov.py pathfinder.py space.py vector.py
満足のいく答えを得ましたが、なぜ列がこのようなことをするのか疑問に思います(そして正しく印刷されるように修正できますか?)。
ベストアンサー1
オプションなしで呼び出されると、column
区切られた各文字列を最も近い文字列にソートします。タップ停止 柱。端末では通常、8文字の列ごとに表示されます。この例を見てください。
一部を含むファイル(ztxt
)を作成します。商標-特徴 \t
区切り文字列は3行にわたって改行文字で終わります\n
。
aaa1\taaaaaaaaaaaaaa2\taaaaaaaaaaaaaaaaaaa3\taaa4
bbbbbbb1\tbbb2\tbbb3
ccc1\tccc2
出力:column ztxt
- 最も近いものと正確に整列タップ停止
aaa1 aaaaaaaaaaaaaa2 aaaaaaaaaaaaaaaaaaa3 aaa4
bbbbbb1 bbb2 bbb3
ccc1 ccc2
| | | | | | |
|-------|-------|-------|-------|-------|-------|
各連続フィールドのLSHをその上のフィールドと並べ替えるには、次のオプションを使用する必要があります-t
。たとえば、次のようになります。column -t ztxt
aaa1 aaaaaaaaaaaaaa2 aaaaaaaaaaaaaaaaaaa3 aaa4
bbbbbb1 bbb2 bbb3
ccc1 ccc2
すべてのデータが改行なしで1つの長いストリームにある場合は、フィルタを使用してそれぞれを導入できます。4フィールド。 sed
このコマンドで行うことができます。
sed -re 's/(([^\t]*\t){3}[^\t]*)\t/\1\n/g'
デフォルトでは、このcolumn
コマンドは隣接する複数の区切り文字を単一の区切り記号にマージします。sed
フィルタでこれを満たすには、次のものが必要です。
sed -re 's/\t+/\t/g;'
したがって、連続ストリームを分割する命令は、タブ区切り文字列です。なぜなら、4番目の文字列はすべて次のようになるからです。
<ztxt sed -re 's/\t+/\t/g;s/(([^\t]*\t){3}[^\t]*)\t/\1\n/g' | column -t
この連続入力ストリームの出力は次のとおりです(元の入力例を使用しますが、元の改行をタブに置き換えることで修正されました。まだ末尾の\ nを維持する必要があります)。
aaa1 aaaaaaaaaaaaaa2 aaaaaaaaaaaaaaaaaaa3 aaa4
bbbbbbb1 bbb2 bbb3 ccc1
ccc2