Чередование семи файлов fastQ

Предположим, что вы:

  • хотели "1 + дата заказа" на позиции 2.
  • "_" -добавленные названия станций.
  • нижний регистр имени канала

Тогда это должно выполнить разыскиваемое преобразование.

$ ls
2007-07-22-2300-11S.NAN___024_ABI___HH_E_SAC
$ for i in *; do
    od="$(expr $(date +%j -d "${i:0:10}") + 1 )";
    chn="${i:39:1}";
    sta="$(echo ${i:30:6} | tr -d '_')";
    mv "$i" "${i:0:4}.$od.${i:11:2}.${i:13:2}.$sta.${chn,,}" ;
  done 
$ ls
2007.204.23.00.ABI.e
0
21.11.2018, 23:24
1 ответ

Следующий perlсценарий открывает каждый файл, указанный в командной строке, сохраняя дескриптор каждого файла в массиве. Затем он повторно считывает и печатает до 4 строк за раз из каждого файла (, каждый раз проверяя EOF, уменьшая значение счетчика $numopenкаждый раз, когда он достигает EOF файла ), пока не останется файлов с непрочитанные строки.

Не нужно закрывать дескрипторы файлов, потому что perlавтоматически закрывает все открытые файлы при выходе.

#!/usr/bin/perl

use strict;

my @filehandles=();
my $files=0;

# open each input file
foreach my $filename (@ARGV) {
  open($filehandles[$files++], "<", $filename) || 
    die "Couldn't open '$filename': $!";
}

$files--;
my $numopen = $files;

# print up to 4 lines at a time from each file
while ($numopen > 0) {
  for my $i (0..$files) {
    if (!eof($filehandles[$i])) {
      for (1..4) {
        if (!eof($filehandles[$i])) {
          print scalar readline($filehandles[$i]);
        } else {
          $numopen--;
        }
      }
    }
  }
}

Сохраните этот скрипт как, например, interleave4.plсделайте его исполняемым с помощью chmod +x interleave4.plи запустите как./interleave4.pl File[1-7]

Этот сценарий был протестирован путем создания 7 файлов со следующей строкой bash one -.

for i in {1..7}; do printf "File$i %s\n" {1..10} > "File$i"; done

Некоторые из файлов были затем отредактированы, чтобы они не содержали одинаковое количество (10 )строк, чтобы убедиться, что сценарий корректно справится с этой ситуацией (да -он просто переходит к следующему файлу без жалоб ). Точно так же у него нет проблем с входными файлами, число строк которых не делится без остатка на 4.

Обратите внимание, :этот скрипт можно было легко модифицировать так, чтобы число строк, печатаемых при каждом проходе через основной цикл, не было -жестко закодированным числом 4, а бралось как опция в командной строке.

0
28.01.2020, 02:44

Теги

Похожие вопросы