列を使用して単一行をフォーマットする方法は?

列を使用して単一行をフォーマットする方法は?

Phonebook.datファイルにデフォルトの登録簿があります。

$ cat phonebook.dat
Onkh,Gregor:0123456789
Steinert,Franz:02473894091
Rubrecht,Magdalena:01474653371

その後、次のようにファイル形式を指定できます。column

$ column -t -s ",:" phonebook.dat
Onkh      Gregor     0123456789
Steinert  Franz      0247389409
Rubrecht  Magdalena  01474653371

しかし、ファイルの1行だけを出力したい場合はどうすればよいですか?ページベースのman場合は、column最後のパラメータとしてファイルが必要です。

この問題を解決しようとしましたが、sed「、」および「:」を次のように置き換えても結果は一貫しません。

$ sed 's/,/\t/g; s/:/\t/g' telefonbuch.dat
Onkh    Gregor  0123456789
Steinert        Franz   02473894091
Rubrecht        Magdalena       01474653371

書式設定されたファイルで1行を使用する方法はcolumn

ベストアンサー1

1行だけフォーマットするには、columnユーティリティに1行だけを提供します。以下では、サンプルデータの行2にのみフォーマットを設定します。

$ sed -n '2p' file | column -s ',:' -t
Steinert  Franz  02473894091

filename 引数はcolumnオプションです。見つからない場合、ユーティリティは標準入力から読み取られます。上記のパイプラインでは、この事実を使用してコマンドの出力形式を指定しますsed

すべてのコマンドを使用して、電話帳からデータを抽出できます。ここでは、awkコマンドを使用してMagdalena2番目のフィールドの項目を出力します。

$ awk -F '[,:]' '$2 == "Magdalena"' file | column -s ',:' -t
Rubrecht  Magdalena  01474653371
$ awk -v name="Magdalena" -F '[,:]' '(family != "" && $1 == family) || (name != "" && $2 == name)' file | column -s ',:' -t
Rubrecht  Magdalena  01474653371
$ awk -v family="Rubrecht" -F '[,:]' '(family != "" && $1 == family) || (name != "" && $2 == name)' file | column -s ',:' -t
Rubrecht  Magdalena  01474653371

おすすめ記事