3

これの小さなバリエーションを試していますが、5 番目のフィールドに基づいて分割されるファイルの区切り文字はコロン「:」またはタブ \t のいずれかであると awk に伝えます。私はその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 オプションで動作しないのはなぜですか?

4

1 に答える 1

2

問題はFS、エラーで指摘されているように、この行の値にはありません。

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

1 行に 2 つのステートメントがあるため、それらを a;または改行 で区切ります。

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 ツールを含むファイルではなく、stdin からの入力を表すために使用されます。

command | awk -f script.awk Tile_Number_List.txt -
于 2013-05-06T18:17:39.893 に答える