Shell
如何使用列格式化單行?
我在 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