使用bash shell脚本,我想获取文件的目录列表,并仅列出特定字符串的唯一实例。
字符串(例如0082230958089736545
)可以在2个地方找到
文件名(在第4部分,最长的数字)
AVAILITY.VT04.00090.0082230958089736545.72732411.20121017.053604220
在XML文档中
<ENVELOPE>
<HEADER>
<ProviderTransID>0082230958089736545</ProviderTransID>
</HEADER>
<ENVELOPE>
在文件名中,前4个部分(包括我想要比较的字符串的部分)是相同的,而后3个部分会更改,因为它们标识了重试文件的进程日期和时间。
字符串的每个实例最多可重复24次。现在我必须手动确保用眼睛抓住每个字符串的实例,我并不总是相信那些LOL。
我想生成一个没有重复的每个字符串的列表,然后将每个字符串分配给它自己的变量,以便稍后在脚本中使用。
只要可以在Bash shell脚本中完成,我不关心字符串是从文件名中提取还是从.XML文档的内容中提取。
答案 0 :(得分:2)
此方法仅访问文件名。将以下任一项添加到shell脚本中:
IFS=$'\n'
array=($(awk -F "." '!a[$5]++ { print $5 }' <(find . -type f)))
或:
IFS=$'\n'
array=($(cut -d "." -f 5 <(find . -type f) | sort -u))
您可以使用数组切片访问数组的元素。要访问第一个元素,例如:
echo "${array[0]}"
或者,您可以使用for循环遍历所有元素:
for i in "${array[@]}"; do
echo "$i"
done