我在文件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
?
答案1
如果您只想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