Просто командой sed
:
pip list | sed '1,2d'
Пояснение :Команда sed
удаляет(d
)строки в диапазоне от 1 до 2 (и выводит все остальное ).
Илиawk
:
pip list | awk 'NR > 2'
Пояснение :Программа awk
выводит все, начиная с строки 3.
awk
было бы особенно полезно, если вы планируете выполнять дальнейший анализ этого вывода, например, извлекать только имена пакетов:
pip list | awk 'NR > 2 { print $1 }'
Команда cut
, которую вы упомянули в вопросе (, несмотря на то, что используемая семантика неверна ), не обрезает строк . Да, это так, но он обрезает поля из строк.
Если вы хотите использовать parallel
и выполнить команду для всех файлов, оканчивающихся на .SAFE
, все, что вам нужно, это:
parallel -j4 <some_program> ::: *.SAFE
Или, если ваши имена файлов могут содержать \n
, используйте-0
:
parallel -j4 -0 <some_program> ::: *.SAFE
Сохранение имен файлов в файле редко является хорошим подходом. Во-первых, это сломается, если имена файлов могут содержать\n
(символы новой строки ), если вы не разделяете файл нулевым -. Вместо этого вы обычно хотите использовать глобус. Тем не менее, есть несколько способов получить имена файлов в файл:
Просто, но не работает с новыми строками в именах файлов:
printf '%s\n' *.SAFE > filenames.txt
Более сложный, но может работать с произвольными именами файлов:
find. -type f -name '*.SAFE' -print0 > filenames
Это создает файл, разделенный NULL -, поэтому вам нужен инструмент, который может обрабатывать такой ввод. parallel
можно сделать это с помощью-0
:
parallel -0 -j4 <some_program> :::: filenames
Таким образом, при таком подходе ваш сценарий может быть:
#!/bin/sh
find. -type f -name '*.SAFE' -print0 > filenames
parallel -0 -j4 <some_program> :::: filenames
Но если ваши имена файлов не содержат пробелов, новых строк или каких-либо других странностей, просто запустите parallel -j4 -0 <some_program> ::: *.SAFE
и покончим с этим.