我有成千上万个文件,它们的名称具有相似的名称,并且经常重复前缀。我想遍历所有文件名并获取唯一前缀的列表。
AB-61-GA_0001c.txt
AB-61-GA_aseguh.xml
AM-81-BU_0678.mp4
AM-81-BU_ochyu.doc
AM-92-LA_gatyt.csv
我想结束输出:
AB-61-GA
AM-81-BU
AM-92-LA
为此,我整理了以下shell脚本
#!/bin/bash
for i in *.*
do
UNIQUEOBJECT=$(echo "$i" | cut -d '_' -f 1 | sort -u)
echo "$UNIQUEOBJECT"
done
由于某种原因,我最终得到了前缀列表(下划线之前的所有内容),并且仍然重复相同的前缀。显然,这只是我对bash脚本的不了解,但是我在做什么错呢? 谢谢
答案 0 :(得分:2)
问题是您的for循环一次发送一个文件名。因此,您可以对单个文件名进行排序和唯一化。
您可以做类似的事情(语法可能不太正确,因为我目前没有用于测试的Linux机器)
#!/bin/bash
UNIQUEOBJECT=$(for i in *.*
do
echo "$i"
done | cut -d '_' -f 1 | sort -u)
echo "$UNIQUEOBJECT"
在排序之前,您需要生成列表。您的原件是在排序后生成列表的。