У меня большой разделенный пробелами файл с тысячами строк и столбцов.Я хотел бы преобразовать значение в NA, если его число меньше 5 в строке.
Ввод:
CHROM 108 139 159 265 350 450 461 559 765 850
SNP1 0 0 0 0 0 0 2 2 2 2
SNP2 2 2 2 2 2 0 0 0 0 0
SNP3 -1 -1 -1 -1 0 0 0 0 0 0
SNP4 0 0 0 -1 -1 2 2 2 2 2
SNP5 1 1 1 1 1 1 0 0 0 0
Вывод:
CHROM 108 139 159 265 350 450 461 559 765 850
SNP1 0 0 0 0 0 0 N.A N.A N.A N.A
SNP2 2 2 2 2 2 0 0 0 0 0
SNP3 N.A N.A N.A N.A 0 0 0 0 0 0
SNP4 N.A N.A N.A N.A N.A 2 2 2 2 2
SNP5 1 1 1 1 1 1 N.A N.A N.A N.A
Я используюэти команды для достижения желаемого результата:
Рассчитать счетчик для нуля:
awk -F'|' 'BEGIN{print "count", "lineNum"}{print gsub(/0/,"") "\t" NR}' input_ > output_1
Извлечение столбца подсчета:
awk '{print $1}' output_1 > output_1_col_1
Слияние отсчета с исходным файлом:
paste -d " " output_1_col_1 original_file > output_2
Преобразовать значение в NA, где число меньше 5:
awk '$1 < 6{gsub("0","N.A")}1' output_2 > Final_output
Аналогичным образом я повторяю эти шаги для вычисления количества для 1, 2 и -1.
Есть лиЕсть ли лучший и быстрый способ получить желаемый результат?