如何使用列格式化单行?

如何使用列格式化单行?

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

相关内容