如何使用 awk 循环遍历文件

如何使用 awk 循环遍历文件

我在 ksh 脚本中使用此命令sed -e '/^*/d' $WORKFILE | awk -f test.awk >> $OUTPUTFILE 来获取 274567 行的文件,如下所示

*
*
*
*
*
 syopsf00
         a0000096
                 782            1
         CAStmtInv
 syopsf00
         a0000096
                 782            1
         USStmtInv
 syopsf00
         a0000096
                 606            1
         CAStmtInv
 syopsf00
         a0000096
                 606            1
         USStmtInv
 syopsf00
         a0000096
               23472            4
         AO
 syopsf00
         a0000096
               23472            4
         Dealer
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

并生成一个包含如下行的文件

syopsf00 a0000096 782 1 CAStmtInv
syopsf00 a0000096 782 1 USStmtInv
syopsf00 a0000096 606 1 CAStmtInv
syopsf00 a0000096 606 1 USStmtInv

但我得到的只是

syopsf00 a0000096 782 1 CAStmtInv

awk 脚本(test.awk)如下所示

BEGIN {
         RS="\n\n";
         FS=" ";

}
END {
         print $1,$2,$3,$4,$5;
}

答案1

虽然(给定您的输入)不太清楚您要完全执行什么操作,但输出的问题是只有送入 awk 的最后一行才会被打印,因为您将打印放在 END 语句中。

它应该看起来像这样:

BEGIN { 
  RS="\n\n"; FS=" ";
}
{ 
  print $1,$2,$3,$4,$5; 
}

注意:缩进只是我个人的喜好。

答案2

我希望鞋底awk就足够了

awk '
     /syopsf00/{print ""}
     !/^[*]/{printf "%s",$0}
     END{print ""}
    ' $WORKFILE >> $OUTPUTFILE

或者,如果您想去除多个空格并使用 awk-scriptfile:

awk -f test.awk "$WORKFILE" >> "$OUTPUTFILE"

哪里test.awk

#!/usr/bin/awk -f
/syopsf00/{print ""}
!/^[*]/{printf ("%s",$1" "$2" "}
END{print ""}

答案3

sed单行:

sed ':X;N;s/*//;$!bX;s/\n  /\t/g;:Y;s/\n\n//g;tY' $WORKFILE

一开始它可能看起来相当复杂,但基本上它会删除所有*,然后删除所有换行符,后跟两个空格('\n '),最后删除双换行符\n\n以进行清理。这个表达式很可能可以简化。

我使用制表符\t而不是空格作为字段分隔符以更好地对齐列,输出是

 syopsf00          a0000096                782            1        CAStmtInv
 syopsf00          a0000096                782            1        USStmtInv
 syopsf00          a0000096                606            1        CAStmtInv
 syopsf00          a0000096                606            1        USStmtInv
 syopsf00          a0000096              23472            4        AO
 syopsf00          a0000096              23472            4        Dealer

相关内容