每个文件后,awk的换行符 [英] awk line break after each file

查看:338
本文介绍了每个文件后,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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆