awk:输出文件太多 10 记录号 12.



我在尝试拆分文件时遇到问题。谁能帮我解决这个问题?

示例内容:

apple fruit
goa   fruit
tomato vegetable
tiger  animal 

脚本:

 #!/bin/bash
 awk 'FNR==1 { hdr = $0; next }
    {
        if(!f[$2]) { print hdr >"file" $2".htm"; f[$2] = 1 }
        print >>"file" $2".htm"
    }' samplefile.txt

您能否尝试以下(未经测试,因为未给出样本(,以防 Sun o.s 使用 /usr/xpg4/bin/awk OR /usr/xpg6/bin/awk(有关更多详细信息,请参阅此答案中的评论(。

似乎 OP 使用的是 OLD 损坏awk close其中的功能无法正常工作以下解决方案,所以我建议 OP 使用xpg尴尬,后来 Ed sir 也证实了这一点。

#!/bin/bash
 awk 'FNR==1 { hdr = $0; next }
    {
        if($2 != prev){close(file)}
        file="file" $2 ".htm"
        if(!f[$2]) {print hdr > file; f[$2] = 1 }
        print >> file
        prev=$2
    }' samplefile.txt

或尝试:

#!/bin/bash
 awk 'FNR==1 { hdr = $0; next }
    {
        file="file" $2 ".htm"
        if(file!=prev){close(prev)}
        if(!f[$2]) {print hdr > file; f[$2] = 1 }
        print >> file
        prev=file
    }' samplefile.txt

您可能用完了FD,请使用close()并尝试类似的东西:

$ awk '
FNR==1 {
    hdr = $0
    next
}
{
    filename="file" $2 ".htm"
    if(!f[$2]) {
        print hdr >> filename
        f[$2] = 1
    }
    print >> filename
    close(filename)
}' file

哦,TIL:旧的[Solaris] awk没有close命令,甚至不够聪明,无法给出错误说"我不知道close是什么意思"。

如果您没有使用 GNU awk(它在后台为您执行此操作(,那么您需要手动关闭由于输入或输出重定向而打开的任何文件 - 您手动打开它们,因此您需要手动关闭它们:

awk '
    FNR==1 { hdr = $0; next }
    $2 != prev {
        close(out)
        out = "file" $2 ".htm"
        if ( !seen[out]++ ) {
            print hdr > out
        }
        prev = $2
    }
    { print >> out }
' samplefile.txt

希望通过拆分,您希望将每个字段 #1 分配给其相应的文件。这是单行 awk 脚本:

awk '$1 in uniqSet == 0 {uniqSet[$1]=1;system("echo "$1" >> file"$2".htm");}' input

解释:

$1 in uniqSet == 0只处理尚未处理的元素,即不在 uniqSet 中的元素。

uniqSet[$1]=1; uniqSet 中的元素标记为 dealt。

system("echo "$1" >> file"$2".htm"); 执行 bash 命令 " echo field#1 >> filefield#2.html

相关内容

  • 没有找到相关文章

最新更新