UNIX列命令:标头的列宽错误

时间:2013-10-02 13:22:30

标签: shell unix formatting

所以我把它作为我的数据文件

Account Number ena5LHtEj Name ena5LHtEj Account Type ena5LHtEj Balance
1 ena5LHtEj foo ena5LHtEj 1 ena5LHtEj 100
1 ena5LHtEj foo ena5LHtEj 1 ena5LHtEj 100
1 ena5LHtEj foo ena5LHtEj 1 ena5LHtEj 100

第1行是列名。 ena5LHtEj是随机生成的分隔符。其他3行是行。这是我正在运行的命令

column -t -s "$delimiter" data

分隔符变量的值为ena5LHtEj,这是它给出的输出

Accou   Numb  r     N    m      Accou   Typ      B  l  c
1       foo    1    100
1       foo    1    100
1       foo    1    100
1       foo    1    100

因此行正确解析,但列标题不会被解析。这不是因为标题名称中的空格,因为我尝试删除空格。只有第一行和第二行之间的差异是宽度。我正在使用bash在ubuntu终端上运行它。

这是它应该给予/我想要的东西

Account Number Name   Account Type Balance
1              foo    1            100
1              foo    1            100
1              foo    1            100
1              foo    1            100

1 个答案:

答案 0 :(得分:2)

你的麻烦来自误解,分隔符不是字符串而是一组字符;每个(不是“按给定顺序排列”)都是可能的分隔符。因此,“数字”之类的东西会在“e”处分开,因为“e”是“ena5LHtEj”的一部分。

试试这个:

column -t -s "|" <(sed 's/ena5LHtEj/|/g' < data)

将您所拥有的字符串分隔符转换为单字符分隔符(在本例中为|)。结果就是您在问题中指定的内容。