次のテキストファイルがあります。最初の3行をお見せします。
chrom st end gene strand c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14
chr6 3345 3543 geneA + 36 -23 -1 3 1250 946 416 458 475 417 58 80 2 14
chr9 1302 1389 geneB - 8 -10 -18 -8 2896 2128 635 955 372 385 -20 31 -7 -7
最初の行はヘッダー行なので、そのまま印刷したいと思います。
次に、後続の行(つまり、行2から始まる)の最初の5つのフィールドをそのまま(チェーン情報まで)印刷し、その後、そのフィールドの値(フィールド6から始まる)が> = 100の場合、値を印刷します。 。現状のままフィールド値が<100の場合はNAに置き換えます。
したがって、私の出力ファイルは次のようになります(理想的にはタブで区切られています)。
chrom st end gene strand c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14
chr6 3345 3543 geneA + NA NA NA NA 1250 946 416 458 475 417 NA NA NA NA
chr9 1302 1389 geneB - NA NA NA NA 2896 2128 635 955 372 385 NA NA NA NA
ベストアンサー1
awk 'NR > 1 { for (i = 6; i <= NF; i++) if ($i < 100) $i = "NA" }; 1' yourfile.txt
拡張コメント:
NR > 1 { # skipping NR == 1, the first line
for (i = 6; i <= NF; i++) # column 6 to the end, skipping first 5
if ($i < 100) $i = "NA" # self-explanatory
}
1 # print all lines; 1 evaluates to true, and default action is print
編集:これを設定する方法はいくつかありますOFS
。私が考えることができる最もきれいな方法は、OFS='\t'
ファイル名を前に付けることです。
awk '...' OFS='\t' file.txt
awk -v OFS='\t' '...' file.txt
awk 'BEGIN { OFS="\t" }; ...' file.txt