Shell

如何使用列格式化單行?

  • February 22, 2022

我在 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

但是如果我只想輸出文件的一行呢?基於man頁面,column需要一個文件作為其最後一個參數。

我嘗試解決此問題,但使案例如sed替換“,”和“:”會產生不一致的結果,如下所示:

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

如何使用 格式化文件中的單行column

如果您只想column格式化一行,那麼只給實用程序一行。下面,我從您的範例數據中僅格式化第 2 行:

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

文件名參數column是可選的,如果缺少,實用程序會從標準輸入中讀取。在上面的管道中,我們使用這個事實來格式化sed命令的輸出。

您可以使用任何命令從電話簿中提取數據。在這裡,我使用awk命令來輸出Magdalena第二個欄位中的條目:

$ 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

引用自:https://unix.stackexchange.com/questions/684806