假设一个包含三列字符串的文件。
> cat file
foo foo bar
bar baz
baz qux
qux
bash中的什么命令(如果有的话)可用于将这些列按行对齐?正确的输出如下所示:
> sought_command file
foo foo
bar bar
baz baz
qux qux
答案 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