列にテキストファイルの内容を表示する方法[重複]

列にテキストファイルの内容を表示する方法[重複]

次のファイルがあります

Id 123 
Name john
Lastname udosen
Tel 123456
Id 124
Name james
Lastname david
Tel 19865

ファイルを印刷する方法は次のとおりです。

Id     Name     Lastname    Tel
123    john     udosen      123456
124    james    david       19865

答え1

タブ区切りの出力が欲しいとしましょう。

$ { printf '%s\n' Id Name Lastname Tel; sed 's/^[^[:blank:]]*.//' file; } | paste - - - -
Id      Name    Lastname        Tel
123     john    udosen  123456
124     james   david   19865

sed各行(タイトル)から最初のスペースまたはタブ区切りの単語を削除するために使用されます。結果をpasteフォーマットに提供し、タブで区切られた4つの列にフォーマットします。まず、出力を使用してヘッダーを追加しますprintf

テーブルを作成するために使用できる見栄えの良い(並べ替えられた)出力が必要ですcolumn。ここでは列間にpaste挿入し;、それを使用してcolumnフィールドをソートするように指示します。

$ { printf '%s\n' Id Name Lastname Tel; sed 's/^[^[:blank:]]*.//' file; } | paste -d ';' - - - - | column -t -s ';'
Id   Name   Lastname  Tel
123  john   udosen    123456
124  james  david     19865

また使用できますcsvlook(一部csvkit)は同様の方法でMarkdown形式のテーブルを作成します。

$ { printf '%s\n' Id Name Lastname Tel; sed 's/^[^[:blank:]]*.//' file; } | paste -d ';' - - - - | csvlook -I -d ';'
| Id  | Name  | Lastname | Tel    |
| --- | ----- | -------- | ------ |
| 123 | john  | udosen   | 123456 |
| 124 | james | david    | 19865  |

関連情報