использование cut в строке с несколькими экземплярами одного и того же разделителя - unix

Я пытаюсь написать общий скрипт, который может иметь разные входные данные имени файла.

Это лишь небольшая часть моего скрипта bash.

например, скажем, папка 444-55 имеет 2 файла

qq.filter.vcf
ee.filter.vcf

Я хочу, чтобы мой вывод был -

qq
ee

Я попробовал это, и это сработало -

ls /data2/delivery/Stack_overflow/1111_2222_3333_23/secondary/444-55/*.filter.vcf | sort | cut -f1 -d "." | xargs -n 1 basename

Но скажем, у меня есть такая папка -

/data2/delivery/Stack_overflow/de.1111_2222_3333_23/secondary/444-55/*.filter.vcf

Мой вывод сценария будет тогда

de
de

Как я могу сделать его универсальным?

Спасибо большое за вашу помощь.


person Sia    schedule 03.11.2016    source источник


Ответы (2)


Что-то вроде этого в скрипте будет "резать" его:

for i in /data2/delivery/Stack_overflow/1111_2222_3333_23/secondary/444-55/*.filter.vcf
do
   basename "$i" | cut -f1 -d.
done | sort

преимущества:

  • он не анализирует вывод ls, который не одобряется
  • он обрезается после применения обработки basename, а cut игнорирует полный путь.
  • он также сортируется последним, поэтому он гарантированно будет отсортирован в соответствии с префиксом
person Jean-François Fabre    schedule 03.11.2016
comment
Отлично. Теперь, пожалуйста, прочитайте это: stackoverflow.com/help/someone-answers - person Jean-François Fabre; 03.11.2016

Просто переместите вызов basename на более раннее место в конвейере:

printf "%s\n" /data2/delivery/Stack_overflow/1111_2222_3333_23/secondary/444-55/*.filter.vcf |
  xargs -n 1 basename |
  sort |
  cut -f1 -d.
person glenn jackman    schedule 03.11.2016
comment
будет ли достаточно echo вместо printf ? ответ хорош, потому что он позволяет избежать цикла for. - person Jean-François Fabre; 03.11.2016
comment
Нет, потому что вам нужно, чтобы имена файлов были в отдельных строках, чтобы xargs мог их прочитать. - person glenn jackman; 03.11.2016
comment
Я понимаю. Хороший трюк. Кстати, почему мы должны сортировать то, что уже сортирует оболочка? Возможно, какие-то экзотические файловые системы выдают файлы в случайном порядке (очистить MVFS), но на стандартных файловых системах это кажется бесполезным. - person Jean-François Fabre; 03.11.2016
comment
Да, это правда. - person glenn jackman; 03.11.2016