Я пытаюсь напечатать список имен файлов в текстовый файл с требованием печатать определенные имена файлов в одной строке. Например, у меня есть 4 файла.
Paleo_R1.fastq
Paleo_R2.fastq
Vegan_R1.fastq
Vegan_R2.fastq
Я хочу, чтобы вывод был
Paleo_R1.fastq Paleo_R2.fastq
Vegan_R1.fastq Vegan_R2.fastq
Я знаю, что могу использовать функцию ls и направить вывод в текстовый файл, используя ls >> file.txt
, но нет опций для печати определенного ввода строки в определенные строки вывода.
Кроме того, я знаю, что могу использовать такие циклы for >
for file in Vegan*R1*.fastq;
do echo $file ${file%_R1.fastq}_R2.fastq >> file.txt;
done
Но я не хочу иметь отдельную команду для каждого имени файла, т.е. для веганов и палео.
Есть ли способ напечатать определенные строки в определенные строки вывода (вывести строки ввода 1 и 2 в строку вывода 1, а строки ввода 3 и 4 в строку вывода 2 и т. д.)
РЕДАКТИРОВАТЬ: Правило основано на каждых N=2 файлах, а не на именах файлов.
У @michael -Хэмптона самый правильный ответ, но для справки, я был нетерпелив и также создал службу systemd под названием vfio-pci-bind.service
, которая выполняетvfio-pci-bind.sh
:
[Unit]
Description=bind PCI card to vfio
[Service]
ExecStart=/opt/vfio-pci-bind/vfio-pci-bind.sh "0000:03:00.1"
Type=oneshot
RemainAfterExit=yes
затем я добавил кlibvirt-guests.service
:
[Service]
...
Wants=vfio-pci-bind.service
After=vfio-pci-bind.service
Проблемы с этим
Так что да, я переключусь на хуки libvirt, спасибо за помощь!
-121 ---211857 -Возможно
$ ls *.fastq | xargs -n2
Bar_R1.fastq Bar_R2.fastq
Bar_R3.fastq Foo_R1.fastq
Foo_R2.fastq Foo_R3.fastq
Paleo_R1.fastq Paleo_R2.fastq
Vegan_R1.fastq Vegan_R2.fastq
или для столбцового вывода
$ ls *.fastq | xargs -n2 | column -t
Bar_R1.fastq Bar_R2.fastq
Bar_R3.fastq Foo_R1.fastq
Foo_R2.fastq Foo_R3.fastq
Paleo_R1.fastq Paleo_R2.fastq
Vegan_R1.fastq Vegan_R2.fastq
(добавьте >> file.txt
к команде, чтобы добавить вывод в файл)
Обратите внимание, что оба примера работают только с именами файлов без пробелов.
Для файлов с пробелами:
$ for i in *.fastq; do echo -ne "$i\0"; done | xargs -0 -n2
Одним из вариантов было бы установить нужные имена файлов в качестве текущих аргументов оболочки, а затем попросить printf
напечатать их парами:
set -- *
printf '%s %s\n' "$@" > output
или только определенные файлы:
set -- *_R?.fastq
Порядок зависит от раскрытия подстановочного знака, который вы использовали. Если вы хотите больше контролировать последовательность, вы можете как-то вручную разделить глоб, например:
set -- Paleo*.fastq Vegan*.fastq Omnivore*.fastq FastFood*.fastq