每个文件后,awk的换行符 [英] awk line break after each file
本文介绍了每个文件后,awk的换行符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
使用此脚本每场根据所述当前文件的最长词打印出来,但都需要有一个换行每一个文件。如何才能实现这一目标?
的awk'BEGIN {ORS =\\ n} FNR = NR {A [++] = $ 0;如果(长度($ 0)>长度(最大值))最大= $ 0; L =长度(最大)} END {为(J = 1; J&下; = I; J ++)printf的(% - (L + 1) S,一个[J-1])}'文件1文件2> OUTFILE
文件1
HELLO
世界
南都
暖
北
冷
文件2
HELLO
世界
南
暖
北
冷
输出
你好,世界,南都,温暖,北,冷
你好,世界,南,温,北冷
解决方案
#!的/ usr /斌/的awk -f
功能beginfile(文件){
拆分(,一)
最大= 0
DELIM =
}功能ENDFILE(文件){
对于(i = 1; I< =行;我++){
printf的%s% - * S,DELIM,最大,一个[I]
DELIM =,
}
printf的\\ n
}文件名!= _oldfilename \\
{
如果(_oldfilename!=)
ENDFILE(_oldfilename)
_oldfilename =文件名
beginfile(文件名)
} END {ENDFILE(文件名)}{
LEN =长度($ 0)
如果(LEN>最大){
最大= LEN
}
一个[FNR] = $ 0个
线= FNR
}
要运行它:
CHMODü+ X名
./filename文件1文件2
请注意,在 GAWK
,你可以做删除
而不是拆分( ,A)
。 GAWK 4已经内置 BEGINFILE
和 ENDFILE
。
With this script every field is printed out according to the longest word of the current file, but needs to have a line break every file. How can this be achieved?
awk 'BEGIN{ORS="\n"}FNR=NR{a[i++]=$0; if(length($0) > length(max)) max=$0;l=length(max)} END{ for(j=1; j<=i;j++) printf("%-"(l+1)"s,",a[j-1])}' file1 file2 >outfile
file1
HELLO
WORLD
SOUTH IS
WARM
NORTH IS
COLD
file2
HELLO
WORLD
SOUTH
WARM
NORTH
COLD
output
HELLO ,WORLD ,SOUTH IS ,WARM ,NORTH IS ,COLD
HELLO ,WORLD ,SOUTH ,WARM ,NORTH ,COLD
解决方案
#!/usr/bin/awk -f
function beginfile (file) {
split("", a)
max = 0
delim = ""
}
function endfile (file) {
for (i = 1; i <= lines; i++) {
printf "%s%-*s", delim, max, a[i]
delim = " ,"
}
printf "\n"
}
FILENAME != _oldfilename \
{
if (_oldfilename != "")
endfile(_oldfilename)
_oldfilename = FILENAME
beginfile(FILENAME)
}
END { endfile(FILENAME) }
{
len = length($0)
if (len > max) {
max = len
}
a[FNR] = $0
lines = FNR
}
To run it:
chmod u+x filename
./filename file1 file2
Note that in gawk
you can do delete a
instead of split("", a)
. GAWK 4 has builtin BEGINFILE
and ENDFILE
.
这篇关于每个文件后,awk的换行符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文