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

时间:2016-11-03 20:01:18

标签: bash unix cut

我正在尝试编写一个可以有不同文件名输入的通用脚本。

这只是我的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

如何使其通用?

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

脚本中的这样的东西会" 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忽略完整路径。
  • 它也排序最后,所以它保证按照前缀
  • 排序

答案 1 :(得分:1)

只需在管道中提前移动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.