perl -lne '
$h{"$_"}=$h[@h]=$_,next if @ARGV && !exists $h{$_};
for my $h (@h) { 1+index(s/\h+/ /rg, " $h chromosome ") && $s{$h}++; }
}{print "$_ $s{$_}" for @h;
' file1 file2
Выход:
Equus caballus 10
Monodelphis domestica 5
Saccharomyces cerevisiae S288c 1
Пояснение:
-n
вызовет Perl
чтение файла построчно И не будет печатать, если об этом не попросят. -l
сделаетRS = ORS = \n
Задействованные структуры данных:
%h
будет иметь ключи как гены, считанные из file1
. @h
будет иметь гены (не -дупликации )в том порядке, в котором они встретились при чтении из file1
. %s
должен иметь ключи, иметь гены и значения, сколько раз этот ген встречался в file2
. Работа:
@ARGV
должен иметь содержимое 1 файла при чтении первого аргумента (файл1 )и быть пустым при чтении второго аргумента (файл2 ). Следовательно, первая строка будет применяться только к file
и будет заполнять хэш %h
и массив @h
.file2
, и обновит хэш %s
до количества раз, когда конкретный ген был найден в данной строке. index(str, substr)
вернет позицию подстроки в строке, если она найдена, otw a -1 возвращается в случае ошибки. %s
будет напечатано в соответствии с порядком ключей, заданным массивом @h
. Вы можете установить драйвер Realtek RTL8821CE :
.sudo apt install rtl8821ce-dkms
или из этого репозитория git:
sudo apt install bc module-assistant build-essential dkms git
sudo m-a prepare
git clone https://github.com/tomaspinho/rtl8821ce.git
cd rtl8821ce
sudo./dkms-install.sh
Выгрузить драйвер rtw_8821ce
:
sudo modprobe -r rtw_8821ce
Перезагрузитьrtl8821ce
:
sudo modprobe -r rtl8821ce
sudo modprobe -v rtl8821ce
Тогда:
echo "blacklist rtw_8821ce" |sudo tee /etc/modprobe.d/blacklist.conf