在具有相同定界符的多个实例的行上使用 cut - unix

using cut on a line having multiple instances of the same delimiter - 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

如何使其通用?

非常感谢您的帮助。

脚本中的类似内容将 "cut" 它:

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的输出,即frowned upon
  • 它在应用 basename 处理后 削减 ,并且 cut 忽略完整路径。
  • 它也是最后排序的,所以保证按照前缀排序

只需将 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.