テキストを列形式で指定する

テキストを列形式で指定する

次の2つの列を持つファイルがあります(はい)。

ファイル1:

John 1
Peter 2
Michael Rod 3
Su 7
Louise 9

フォーマットする必要があります。予想される出力は次のとおりです。

ファイル1:

John        1
Peter       2
Michael Rod 3
Su          7
Louise      9

答え1

入力に2つの列しかない場合は使用することをお勧めします。ただし、ユーティリティは複数のスペースまたはタブを列区切り文字として扱うため、column -tここでは正しく機能しません。column

$ column -t file1
John     1      
Peter    2      
Michael  Rod  3 
Su       7      
Louise   9      

「Michael Rod」は2つの列なので、1つの行に他の行よりも1つの列があり、出力が混乱します。

最後の列の前にタブ文字を挿入してからcolumn区切り文字としてのみ使用すると、この問題を解決できます。

$ awk '{ $NF = "\t" $NF; print }' file1 | column -t -s $'\t'
John          1
Peter         2
Michael Rod   3
Su            7
Louise        9

awkでは、NFフィールド(列)の数、$NFは最後のフィールドのデータです。私が使用するスクリプトは簡単です改訂する行全体を印刷する前に、前にタブ文字を追加して最後のフィールドのデータを表示します。

シェルがそれを理解していない場合は、$'\t'データの一部以外の文字を選択できます。

awk '{ $NF = "@" $NF; print }' file1 | column -t -s '@'
John          1
Peter         2
Michael Rod   3
Su            7
Louise        9

関連情報