【问题标题】:While read line, awk $line with multiple delimiters读取行时,使用多个分隔符 awk $line
【发布时间】:2013-04-30 13:23:24
【问题描述】:

我正在尝试this 的一个小变体,但我告诉 awk 要根据第 5 个字段拆分的文件的分隔符可以是冒号“:”或制表符 \t。我单独执行awk -F '[:\t]' 部分,它确实打印了正确的 $5 字段。

但是,当我尝试将其合并到更大的命令中时,它会返回以下错误:

                                                             print > f
awk: cmd. line:9:                                            ^ syntax error

这是代码:

awk -F '[:\t]' '    # read the list of numbers in Tile_Number_List
    FNR == NR {
        num[$1]
        next
    }

    # process each line of the .BAM file
    # any lines with an "unknown" $5 will be ignored
    $5 in num {
        f = "Alignments_" $5 ".sam"        print > f
    } ' Tile_Number_List.txt little.sam

为什么它不能与 -F 选项一起使用?

【问题讨论】:

    标签: unix loops awk readline


    【解决方案1】:

    问题不在于FS 的值,而是错误所指出的这一行:

    f = "Alignments_" $5 ".sam"        print > f
    

    您在一行中有两个语句,因此请使用 ; 或换行符分隔它们:

    f = "Alignments_" $5 ".sam"; print > f
    

    或者:

    f = "Alignments_" $5 ".sam"
    print > f
    

    作为一个完整的班轮:

    awk -F '[:\t]' 'FNR==NR{n[$1];next}$5 in n{print > ("Alignments_"$5".sam")}'
    

    或作为脚本文件,即script.awk:

    BEGIN {
        FS="[:\t]" 
    }
    # read the list of numbers in Tile_Number_List
    FNR == NR {
        num[$1]
        next
    }
    # process each line of the .BAM file
    # any lines with an "unknown" $5 will be ignored
    $5 in num {
        f = "Alignments_" $5 ".sam"        
        print > f
    }
    

    以这种形式运行awk -f script.awk Tile_Number_List.txt little.sam

    编辑:

    字符- 用于表示来自标准输入的输入,而不是带有许多*nix 工具的文件。

    command | awk -f script.awk Tile_Number_List.txt -
    

    【讨论】:

    • @CarmenSandoval 如果它解决了您的问题,请不要忘记投票并接受这个答案。
    • 是的,我只需要等待几分钟 :)
    • 是否可以通过管道传递 little.sam 而不是在行尾指示它? little.sam 是先前操作的标准输出,我宁愿不必将其存储在磁盘中。您将如何通过管道将其作为 script.awk 的输入?谢谢! :)
    • 大家好,我发布了一个与in this link 相关的新问题,关于如何将其合并到带有变量的 .sh 脚本中以传递给该命令。我希望你能帮忙 :) 非常感谢,卡门
    猜你喜欢
    • 2013-04-26
    • 2017-12-02
    • 2012-08-25
    • 2014-07-24
    • 2013-04-30
    • 1970-01-01
    • 2018-01-15
    • 2020-11-21
    相关资源
    最近更新 更多