在awk中格式化打印

时间:2015-12-03 04:29:46

标签: bash awk

我有一个文件,我把它放入维基

Marina Abramović 43199842
Vito Acconci 43160016
Bas Jan 80902233
Eija-Liisa Ahtila 43406552
Peggy Ahwesh 37006646
Rita Ackermann 43208993
Chantal Akerman 43272249
Vikky Alexander 80703016
Edward Allington 43387956
Francis Alÿs 43215850
Laurie Anderson 43170307
Carl Andre 43308046
Janine Antoni 43386750
Ida Applebroog 43392256
Nobuyoshi Araki 43387929
Diane Arbus 43394941
Siah Armajani 43312101
Arman smith  80008834
John Armleder 43437177
Richard Artschwager 43371334
Frank Auerbach 43386120

如果我将Pipes放在单词和名称之间,当我把它放在wiki中时,它看起来像一个漂亮的格式化的表。我使用的awk工作得很好,但是有时候我花了更多的时间来平衡我将手动放入管道的列。

casper@casper-PC ~ ->
 11:16 PM Wed Dec 02$ awk '{$1="|" $1 ; $2=$2 "| " ; $3=$3 "|       |        |" ; print $0}' /tmp/joinNameNumber
|Marina Abramović|  43199842|       |        |
|Vito Acconci|  43160016|       |        |
|Bas Jan|  80902233|       |        |
|Eija-Liisa Ahtila|  43406552|       |        |
|Peggy Ahwesh|  37006646|       |        |
|Rita Ackermann|  43208993|       |        |
|Chantal Akerman|  43272249|       |        |
|Vikky Alexander|  80703016|       |        |
|Edward Allington|  43387956|       |        |
|Francis Alÿs|  43215850|       |        |
|Laurie Anderson|  43170307|       |        |
|Carl Andre|  43308046|       |        |
|Janine Antoni|  43386750|       |        |
|Ida Applebroog|  43392256|       |        |
|Nobuyoshi Araki|  43387929|       |        |
|Diane Arbus|  43394941|       |        |
|Siah Armajani|  43312101|       |        |
|Arman Smith|  80008834|       |        |
|John Armleder|  43437177|       |        |
|Richard Artschwager|  43371334|       |        |
|Frank Auerbach|  43386120|       |        |
casper@casper-PC ~ ->
 11:16 PM Wed Dec 02$

有没有办法可以打印固定宽度的线?

|Marina Abramović   |  43199842|       |        |
|Vito Acconci       |  43160016|       |        |
|Bas Jan            |  80902233|       |        |
|Eija-Liisa Ahtila  |  43406552|       |        |
|Peggy Ahwesh       |  37006646|       |        |
|Rita Ackermann     |  43208993|       |        |
|Chantal Akerma     |  43272249|       |        |
|Vikky Alexander    |  80703016|       |        |
|Edward Allington   |  43387956|       |        |
|Francis Alÿs       |  43215850|       |        |
|Laurie Anderson    |  43170307|       |        |
|Carl Andre         |  43308046|       |        |
|Janine Antoni      |  43386750|       |        |
|Ida Applebroog     |  43392256|       |        |
|Nobuyoshi Araki    |  43387929|       |        |
|Diane Arbus        |  43394941|       |        |
|Siah Armajani      |  43312101|       |        |
|Arman Smith        |  80008834|       |        |
|John Armleder      |  43437177|       |        |
|Richard Artschwager|  43371334|       |        |
|Frank Auerbach     |  43386120|       |        |
casper@casper-PC ~ ->
 11:16 PM Wed Dec 02$

1 个答案:

答案 0 :(得分:4)

我认为您说您的输入文件是以管道分隔的(但我不会在您的示例数据中看到)。

如果您的数据 以管道分隔,那么这是一个解决方案。

awk -F"|" '{printf("|%-25s|%10s|%8s|%8s|\n", $1, $2, $3, $4)}' file > newFile

显然,%25s值表示25个字符宽,因此需要进行更改以满足您的需求。

-中的偶然前导%-25s表示左对齐文字。

修订数据解决方案

 awk '{printf("|%-25s|%10s|%8s|%8s|\n", $1 " " $2, $3, $4, $5)}' file > newFile

现在,$1 " " $2进入前2" |" chars,依靠awk的连接功能为%-25s格式说明符提供1个值。

<强>测试

echo "Peggy Ahwesh 37006646" | awk '{printf("|%-25s|%10s|%8s|%8s|\n", $1 $2, $3, $4, $5)}'

<强>输出

|PeggyAhwesh              |  37006646|        |        |