[英]Using awk to align columns in text file?
Would awk
be useful to convert "Input" to "Desired output"? 将awk
是“输入”转换为“所需的输出”有用吗?
Input 输入
testing speed of encryption
test 0 (64 bit key, 16 byte blocks): 2250265 operations in 1 seconds (36004240 bytes)
test 1 (128 bit key, 64 byte blocks): 879149 operations in 1 seconds (56265536 bytes)
test 2 (128 bit key, 256 byte blocks): 258978 operations in 1 seconds (66298368 bytes)
test 3 (128 bit key, 1024 byte blocks): 68218 operations in 1 seconds (69855232 bytes)
test 4 (128 bit key, 8192 byte blocks): 8614 operations in 1 seconds (70565888 bytes)
test 10 (256 bit key, 16 byte blocks): 1790881 operations in 1 seconds (3654096 bytes)
Desired output 期望的输出
testing speed of encryption
test 0 (64 bit key, 16 byte blocks): 2250265 operations in 1 seconds (36004240 bytes)
test 1 (128 bit key, 64 byte blocks): 879149 operations in 1 seconds (56265536 bytes)
test 2 (128 bit key, 256 byte blocks): 258978 operations in 1 seconds (66298368 bytes)
test 3 (128 bit key, 1024 byte blocks): 68218 operations in 1 seconds (69855232 bytes)
test 4 (128 bit key, 8192 byte blocks): 8614 operations in 1 seconds (70565888 bytes)
test 10 (256 bit key, 16 byte blocks): 1790881 operations in 1 seconds (3654096 bytes)
A trick to align right using column
is to use rev
: 使用column
对齐的技巧是使用rev
:
$ head -1 file; tail -n+2 file | rev | column -t | rev
testing speed of encryption
test 0 (64 bit key, 16 byte blocks): 2250265 operations in 1 seconds (36004240 bytes)
test 1 (128 bit key, 64 byte blocks): 879149 operations in 1 seconds (56265536 bytes)
test 2 (128 bit key, 256 byte blocks): 258978 operations in 1 seconds (66298368 bytes)
test 3 (128 bit key, 1024 byte blocks): 68218 operations in 1 seconds (69855232 bytes)
test 4 (128 bit key, 8192 byte blocks): 8614 operations in 1 seconds (70565888 bytes)
test 10 (256 bit key, 16 byte blocks): 1790881 operations in 1 seconds (3654096 bytes)
Yes. 是。 Look at the syntax for awk's printf() function. 查看awk的printf()函数的语法。 Abbreviated sample code . 缩写示例代码。 . 。 . 。
{
printf("%s %2s ", $1, $2);
printf("%4s %s %s ", $3, $4, $5);
printf("%4s %s %s ", $6, $7, $8);
printf("%7s\n", $9);
}
Output. 输出。
test 0 (64 bit key, 16 byte blocks): 2250265
test 1 (128 bit key, 64 byte blocks): 879149
test 2 (128 bit key, 256 byte blocks): 258978
test 3 (128 bit key, 1024 byte blocks): 68218
test 4 (128 bit key, 8192 byte blocks): 8614
test 10 (256 bit key, 16 byte blocks): 1790881
Docs for GNU awk's printf() . GNU awk的printf()文档 。
There are several ways to pass the "heading" through unmodified. 有几种方法可以通过未经修改的方式传递“标题”。 This way assumes it's always on the first line of the file. 这种方式假设它始终位于文件的第一行。
NR==1 { print $0}
NR>1 {
printf("%s %2s ", $1, $2);
printf("%4s %s %s ", $3, $4, $5);
printf("%4s %s %s ", $6, $7, $8);
printf("%7s\n", $9);
}
awk '
FNR==1 { if (NR==FNR) print; next }
NR==FNR {
for(i=1;i<=NF;i++)
w[i] = (w[i] <= length($i) ? length($i) : w[i])
next
}
{
for(i=1;i<=NF;i++)
printf "%*s",w[i]+(i>1?1:0),$i
print ""
}
' file file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.