
Bashでプログラムを実行した後の出力は次のようになります(2行、:limiter、4つのデータ列)。
#003:BMW:11:36
#004:Audi:2:35
こんなbashテーブルに変換したい
数字 | 車 | ID | コスト |
---|---|---|---|
#003 | BMW | 11 | 36 |
#004 | アウディ | 2 | 35 |
これを達成するためにsed / awkを使用できますか?私のデータはファイルにありません。
答え1
データ型を次のように指定するとします。
| Number | Car | ID | Cost |
| ------ | ---- | -- | ---- |
| #003 | BMW | 11 | 36 |
| #004 | Audi | 2 | 35 |
コマンドはcsvlook
以下から来ます。csvkitタイトルを最初に入力すると自動的に完了します。
ファイルを編集したり(またはデータジェネレータコマンドでヘッダーをエクスポートしたり)、先頭に行を追加してNumber:Car:ID:Cost
ヘッダーを挿入したり、即座にヘッダー行を提供したりできます。
$ { echo Number:Car:ID:Cost; cat file; } | csvlook
| Number | Car | ID | Cost |
| ------ | ---- | -- | ---- |
| #003 | BMW | 11 | 36 |
| #004 | Audi | 2 | 35 |
上記csvlook
のコマンドは、データがCSV文書であることを検出し、:
フィールド区切り文字として使用し(明示的に指定することもできます-d :
)、書式付きテーブルを生成します。
cat file
データを出力として生成する任意のコマンドに置き換えることができます。
最終出力csvlook
は有効なMarkdownコードであり、このウェブサイトでは次のようにレンダリングされます。
数字 | 車 | ID | コスト |
---|---|---|---|
#003 | BMW | 11 | 36 |
#004 | アウディ | 2 | 35 |
:
入力をCSVとして処理すると、引用符付きのフィールドをサポートできます。
$ cat file
#003:BMW:11:36
#004:Audi:2:35
#005:Saab:99:"1:50"
$ { echo Number:Car:ID:Cost; cat file; } | csvlook
| Number | Car | ID | Cost |
| ------ | ---- | -- | ---- |
| #003 | BMW | 11 | 36 |
| #004 | Audi | 2 | 35 |
| #005 | Saab | 99 | 1:50 |
答え2
あなたが使用できる:
process-generating-output | sed '1i Number:Car:ID:Cost\n' | column -s: -t
出力:
Number Car ID Cost
#003 BMW 11 36
#004 Audi 2 35
sedコマンドを使用して、1i
プロセスビルド出力に列があるかのようにコロンで区切って列名を入力する行を挿入します。その後、列コマンドを介してすべてをパイプして整列します。
(列名を挿入するより良い方法を提供した@FrédéricLoyerに感謝します!)
答え3
出力ストリームを次の行にパイプします。
| column -ts: -o$'\t' -N Number,Car,ID,Cost
おそらく-o$'\t'
()オプションを省略する必要があるようです。--output-separator