Awk 使用printf自动设置文本格式(基于每列的maxlength)
输入数据有n列以“|”表示,如下例所示:Awk 使用printf自动设置文本格式(基于每列的maxlength),awk,Awk,输入数据有n列以“|”表示,如下例所示: 121|234234|5345|2342342342432423 1|2342|2|2342 234|23|343|34214222 如何找到每列的最大长度,并在以后输入的printf格式中使用它,即使输入数据在将来发生更改,该格式也会起作用 在指挥方面,例如: awk-F'|'''。。。。。{printf“%-longestincol1s%-longestincol2s%-longestincol3s%-s\n”、$1、$2、$3、$4}”列 如果你
121|234234|5345|2342342342432423
1|2342|2|2342
234|23|343|34214222
如何找到每列的最大长度,并在以后输入的printf格式中使用它,即使输入数据在将来发生更改,该格式也会起作用
在指挥方面,例如:
awk-F'|'''。。。。。{printf“%-longestincol1s%-longestincol2s%-longestincol3s%-s\n”、$1、$2、$3、$4}”列
如果你只想有一个漂亮的打印输出,你可以使用column
column -t -s'|' -o'|' file
但是,它并不完全适合您的printf
格式。它没有左对齐
Awk
如果要使用awk进行此操作,可以应用至少两种方法:
处理该文件一次
让awk遍历输入一次,在循环期间计算最大宽度,将所有行保存在内存中。最后,end{…}
循环遍历数组以进行打印
处理该文件两次
首先让awk遍历文件,只需计算最大宽度,然后保存到变量中。第二步,进行格式化打印
我没有给出工作代码,但我希望我能回答清楚。当您下次遇到类似问题时,它也会很有帮助。Column
如果你只想有一个漂亮的打印输出,你可以使用column
column -t -s'|' -o'|' file
但是,它并不完全适合您的printf
格式。它没有左对齐
Awk
如果要使用awk进行此操作,可以应用至少两种方法:
处理该文件一次
让awk遍历输入一次,在循环期间计算最大宽度,将所有行保存在内存中。最后,end{…}
循环遍历数组以进行打印
处理该文件两次
首先让awk遍历文件,只需计算最大宽度,然后保存到变量中。第二步,进行格式化打印
我没有给出工作代码,但我希望我能回答清楚。下次遇到类似问题时,它也会很有帮助。输入:
$ cat infile
121|234234|5345|2342342342432423
1|2342|2|2342
234|23|343|34214222
awk '
BEGIN{
FS=OFS="|"
}
FNR==NR{
for(i=1; i<=NF;i++)
wd[i]=wd[i]>length($i)?wd[i]:length($i);
next
}
{
for(i=1; i<=NF; i++)
printf("%*s%s",wd[i],$i,(i<NF?OFS:ORS));
}
' infile infile
输出:
$ cat infile
121|234234|5345|2342342342432423
1|2342|2|2342
234|23|343|34214222
awk '
BEGIN{
FS=OFS="|"
}
FNR==NR{
for(i=1; i<=NF;i++)
wd[i]=wd[i]>length($i)?wd[i]:length($i);
next
}
{
for(i=1; i<=NF; i++)
printf("%*s%s",wd[i],$i,(i<NF?OFS:ORS));
}
' infile infile
与printf(“%*s%s”
可读性更好:
$ cat infile
121|234234|5345|2342342342432423
1|2342|2|2342
234|23|343|34214222
awk '
BEGIN{
FS=OFS="|"
}
FNR==NR{
for(i=1; i<=NF;i++)
wd[i]=wd[i]>length($i)?wd[i]:length($i);
next
}
{
for(i=1; i<=NF; i++)
printf("%*s%s",wd[i],$i,(i<NF?OFS:ORS));
}
' infile infile
与
printf("%5s", "");
输入:
$ cat infile
121|234234|5345|2342342342432423
1|2342|2|2342
234|23|343|34214222
awk '
BEGIN{
FS=OFS="|"
}
FNR==NR{
for(i=1; i<=NF;i++)
wd[i]=wd[i]>length($i)?wd[i]:length($i);
next
}
{
for(i=1; i<=NF; i++)
printf("%*s%s",wd[i],$i,(i<NF?OFS:ORS));
}
' infile infile
输出:
$ cat infile
121|234234|5345|2342342342432423
1|2342|2|2342
234|23|343|34214222
awk '
BEGIN{
FS=OFS="|"
}
FNR==NR{
for(i=1; i<=NF;i++)
wd[i]=wd[i]>length($i)?wd[i]:length($i);
next
}
{
for(i=1; i<=NF; i++)
printf("%*s%s",wd[i],$i,(i<NF?OFS:ORS));
}
' infile infile
与printf(“%*s%s”
可读性更好:
$ cat infile
121|234234|5345|2342342342432423
1|2342|2|2342
234|23|343|34214222
awk '
BEGIN{
FS=OFS="|"
}
FNR==NR{
for(i=1; i<=NF;i++)
wd[i]=wd[i]>length($i)?wd[i]:length($i);
next
}
{
for(i=1; i<=NF; i++)
printf("%*s%s",wd[i],$i,(i<NF?OFS:ORS));
}
' infile infile
与
printf("%5s", "");
我认为GNU专栏可以使用
-o
,我认为GNU专栏可以使用-o