努力将awk组合成一遍

运行命令后
find . -name \"R*VER\" -mtime +1 -exec sh -c \'grep -H ^err \"{}\" || echo \"{}:No error\"\' \\;
我的档案看起来像这样
RRR1~COS~COSMETICS~40048~jgmdtv113~1~P~R22-200~029053662549~20110607~102151.VER No error
RRR1~COS~COSMETICS~ETT03~jgm14652.~3~F~R16-500~000907009757~20110607~085109.VER err 3922    
使用波浪号(〜)作为文件名中的定界符,我可以提取所需的字段,以便得到这样的输出吗?
RRR1~COS~COSMETICS~40048~jgmdtv113~1~P~R22-200~029053662549~20110607~102151.VER No error RRR1 COS P
RRR1~COS~COSMETICS~ETT03~jgm14652.~3~F~R16-500~000907009757~20110607~085109.VER err 3922 RRR1 COS F     
我尝试了以下
find . -name \"R*VER\" -mtime +1 -exec sh -c \'grep -H ^err \"{}\" || echo \"{}:No error\"\' \\;|awk -F~ \'{print $0}{print $1\"\\t\"$2\"\\t\"$7\"\\t\"$8\"\\t\"$9\"\\t\"$10}\'
但它不起作用;相反,它将产生此输出(并非此处显示所有字段...)
RRR1~COS~COSMETICS~40048~jgmdtv113~1~P~R22-200~029053662549~20110607~102151.VER No error
RRR1~COS~COSMETICS~40048~jgmdtv113~1~P~R22-200~029053662549~20110607~102151.VER RRR1 COS P
RRR1~COS~COSMETICS~ETT03~jgm14652.~3~F~R16-500~000907009757~20110607~085109.VER err 3922
RRR1~COS~COSMETICS~ETT03~jgm14652.~3~F~R16-500~000907009757~20110607~085109.VER RRR1 COS F
我想这样做是一回事,所以我可以用INSERT语句生成一个SQL脚本...可以吗?     
已邀请:
        您应该只使用一个操作即可打印所有内容:
awk -F~ {print $0 \" \" $1 \" \" $2 \" \" ...}
    
        在帮助下,这是我得到的:
find . -name \"R*VER\" -exec sh -c \'grep -H ^err \"{}\" || echo \"{}:No error\"\' \\; |
        awk -F: \'
                BEGIN { q=\"\\047\" }
                {
                        file=$1
                        result=$2
                        sub(/^.*\\//,\"\",file)
                        split(file,a,/~/)
                        print \"INSERT INTO MYTABLE (COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8) VALUES (\" q file q \",\" q result q \",\" q a[1] q \",\" q a[2] q \",\" q a[7] q \",\" q a[8] q \",\" q a[9] q \",\" q a[10] q \")\"
                }\'
效果很好。感谢您抽出宝贵的时间。     

要回复问题请先登录注册