
別の質問で私は尋ねました。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
答え2
マルチセパレータビットの場合。面倒なことに、-nオプションは複数の区切り文字を処理するDebianでのみ使用できます。
column -t -n <file>
答え3
出力に印刷できない文字を表示するには(可能であればCエスケープコードとして)、コマンドのオプションを使用することもls
でき-b
ますls
。
ls -Cb | grep -v '\.pyc$' | column -t
答え4
列の問題は\ s +に分割されるということですが、単一のタブに分割する方法がわかりません。私はこの問題を解決するためのより柔軟なスクリプトを書いています。このスクリプトは誰でも無料で利用できます。
http://itmat.greg.s3.amazonaws.com/display.pl.gz
全体的な使用法は次のとおりです。
------------------------------------- ------------- |このスクリプトは、正しくソートされた列にタブ区切りのテキストを表示します。 | | |使用法:perl display.pl [行数] [オプション] | | |タブ区切り記号がある場所。 | | |次に正の整数Nが来たら、最初のN行のみ| |返されます。 | | |行が非常に長い場合、"less -S"にパイプされている場合、スクリプトは最適です。 | | [オプション] | | | -noheader: デフォルトではヘッダー行を想定します。 | | -nodots:デフォルトでは、列が広く、列に項目がある場合 |非常に短く、整理を助けるために最後にポイントを追加しました。 | |ドット以外のスペースのみを印刷するには、このオプションを使用してください。 | | | -dotcols : ドットで特定の列を指定するには | |(-nodotsオプションを参照)コンマでなければなりません。 |スペースなしでスペースで区切られた正の整数のリスト。 | | | -cols: 出力する列のサブセットを指定するために使用します。 | |は、カンマで区切られた正の整数のリストです。 |および/または正の整数範囲。有効な例 |リストは4、6、12または4-10または1-4、12、15、4-7です。コラム |繰り返すことができ、番号順にリストする必要はありません。 | | |注:このスクリプトはより複雑なスクリプトでハッキングされました。 | |コードは関係のないあらゆる種類の内容でいっぱいです。 | ------------------------------------- -------------