Как извлечь конкретные строки на основе номера строки из файла - PullRequest
0 голосов
/ 16 мая 2018

Я работаю над набором данных RNA-Seq, состоящим из примерно 24000 строк (генов) и 1100 столбцов (образцов), разделенных табуляцией.Для анализа мне нужно выбрать конкретный набор генов.Было бы очень полезно, если есть метод для извлечения строк на основе номера строки?Для меня это было бы проще, чем с именами генов.

Ниже приведен пример данных (4X4) -

ген Sample1 Sample2 Sample3

A1BG 5658 5897 6064

AURKA 3656 3484 3415

AURKB 9479 10542 9895

Отсюда, например, я хочу строки 1, 3 и 4 безконкретный шаблон

Я также спрашивал на biostars.org .

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Скажем, у вас есть файл или программа, которая генерирует список номеров строк, которые вы хотите, вы можете отредактировать это с помощью sed, чтобы превратить его в скрипт, который печатает эти строки и передает его во второй вызов sed.

Конкретно, скажем, у вас есть файл с именем lines, в котором указано, какие строки вы хотите (или это может быть программа, которая генерирует строки на своем stdout):

1
3
4

Вы можете сделать это в sed сценарии так:

sed 's/$/p/' lines
1p
3p
4p

Теперь вы можете передать это другому sed в качестве команд для выполнения:

sed -n -f <(sed 's/$/p/' lines) FileYouWantLinesFrom

Это имеет преимущество в том, что не зависит от максимальной длины аргументов, которые вы можете передать скрипту, потому что команды sed находятся в псевдофайле, т.е. не передаются в качестве аргументов.


Если вам не нравятся / используют bash и процесс подстановки , вы можете сделать то же самое, как это:

sed 's/$/p/' lines | sed -n -f /dev/stdin FileYouWantLinesFrom
0 голосов
/ 16 мая 2018

Вы можете использовать цикл for для построения параметров sed, как показано ниже

var=-n
for i in 1 3,4 # Put your space separated ranges here
do
 var="${var} -e ${i}p"
done
sed $var filename

Примечание: В любом случае упомянутое требование здесь все равно было бы болью, так как слишком много печатало.

...