按行

时间:2015-12-11 09:03:02

标签: string bash text-alignment

假设一个包含三列字符串的文件。

> cat file
foo foo bar
bar baz
baz qux
qux

bash中的什么命令(如果有的话)可用于将这些列按行对齐?正确的输出如下所示:

> sought_command file
foo foo
bar     bar
baz baz
qux qux 

1 个答案:

答案 0 :(得分:0)

使用awk:

$scope.$watch('issue', function(nv,ov) {

    console.log(nv, ov);

}, true)

关于输入与输出数据的顺序:我认为没有任何输入令牌顺序,因为下面的输入数据也应该给出类似的输出。

$ awk 'max<NF{max=NF} # Get max number of columns
    { #For every input line,
       for(i=1;i<=NF;i++){
           b[$i]++;   # Record all possible tokens, like foo, bar etc.
           a[i$i]++;  # Record their column indices
       }
    }

    END{
           for(i in b) #Get max length of all the tokens (for printing)
               if(c<length(i))
                   c=length(i); 

           for(i in b) # For each token,
           {
              for(j=1;j<=max;j++){ # For every column,
                  if(a[j i]) d = i; # Decide, if we want to print it, or left blank...
                  else d="";

                  printf "%-"(c+5)"s", d; # Print the token, or blank space
              }
              print ""; # Print newline after every tokens line.
           }
       }' test.input

foo     foo             
baz     baz             
qux     qux             
bar             bar     

可以保持令牌首次出现的顺序。例如在上面(重新排序)的情况下,它将是foo,bar,baz,qux。

foo foo
bar
baz baz bar
qux qux