AWK用于保存不同字段中的读取模式

时间:2013-12-01 19:04:08

标签: bash unix awk grep

我使用grep使用不同的正则表达式从长字符串中获取我想要的内容。我grep每个模式并将结果存储在变量中,稍后我paste将不同变量的列表存成我的表。

像这样:

FIELD_A=$(grep -o 'pattern1' Longstringfile)
FIELD_B=$(grep -o 'pattern2' Longstringfile)
FIELD_C=$(grep -o 'pattern3' Longstringfile)
FIELD_D=$(grep -o 'pattern4' Longstringfile)
paste <(echo $FIELD_A |tr ' ' '\n') <(echo $FIELD_b |tr ' ' '\n') <(echo $FIELD_c |tr ' '    '\n') <(echo $FIELD_d |tr ' ' '\n') > Resultfile

使用AWK可以更简单吗?

当我用这件事完成任务时,我想:看起来四处走动,终于到了我邻居家。后来我进入了AWK,我发现使用这种东西是一件好事,问题是我对它不太了解,我正在学习,但有时候教程会朝不同的方向发展。

1 个答案:

答案 0 :(得分:1)

您可以尝试:

awk -f e.awk Longstringfile > Resultfile

其中e.awk是:

BEGIN {
    w[1]="pattern1"
    w[2]="pattern2"
    w[3]="pattern3"
    w[4]="pattern4"
}
{
    nmax=0
    for (i=1; i<=4; i++) {
        line=$0
        k=0
        while (match(line,w[i],r)) {
            line=substr(line,RSTART+RLENGTH)
            n=split(r[0],q)
            for (j=1; j<=n; j++)
                a[i,j+k+N]=q[j]
            k=k+n
        }
        if (k>nmax) nmax=k
    }
    N=N+nmax
}

END {
    for (j=1; j<=N; j++)
        print a[1,j] "\t" a[2,j] "\t" a[3,j] "\t" a[4,j]
}