Используйте awk / bash, чтобы добавить 1 ко всем столбцам, но сначала - PullRequest
0 голосов
/ 29 марта 2020

У меня есть таблица, в которой заголовок - это список образцов, а первый столбец - список генов, а остальные - значения экспрессии для каждого гена в каждом образце. Я хочу добавить псевдосчет 1 ко всем значениям, и в настоящее время я делаю это следующим образом:

cat <(head -n 1 TPM/QuickTest_Dataset.table) \
<(tail -n +2 TPM/QuickTest_Dataset.table | awk '{print $1, $2+1, $3+1, $4+1, $5+1, $6+1, $7+1, $8+1, $9+1, $10+1, $11+1, $12+1, $13+1, $14+1, $15+1, $16+1, $17+1, $18+1, $19+1, $20+1, $21+1}' | sed 's, ,\t,g') > StringTie-TPM_Homo_sapiens_GRCh38.Exp9-PMacrophageM1.protein_coding.table

Однако количество выборок не всегда равно 20 (количество столбцов не всегда равно 21) иногда больше, иногда меньше, и мне приходится каждый раз вручную настраивать его.

Есть ли более простой способ?

Ответы [ 3 ]

3 голосов
/ 29 марта 2020

awk отличный язык. Просто перебирайте поля и увеличивайте их.

awk '{ for (i = 2; i <= NR; ++i) $i += 1; } 1'
1 голос
/ 29 марта 2020

Вы можете сделать это с помощью одного awk вызова:

awk 'BEGIN{OFS="\t"} FNR==1{print; next} {for (i=2;i<=NF;i++)$i=$i+1}1' infile > outfile
0 голосов
/ 29 марта 2020

Google-поиск "awk Количество полей" позволил мне этот пост , упомянув переменную NF, которую вы могли бы использовать.

Поиск "awk for-l oop "перенаправляет на этот URL , где демонстрируется следующая простая awk for-l oop (здесь также используется переменная NF):

awk '{ for (i = 1; i <= NF; i++) total = total+$i }; END { print total }'

This может дать вам хорошее начало для решения этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...