0

使用 bash shell 脚本,我想获取文件的目录列表,并且只列出特定字符串的唯一实例。

字符串(例如0082230958089736545)可以在 2 个地方找到

  1. 文件名(在第 4 部分,最长的数字)

    AVAILITY.VT04.00090.0082230958089736545.72732411.20121017.053604220
    
  2. XML 文档内部

    <ENVELOPE>
    <HEADER>
    <ProviderTransID>0082230958089736545</ProviderTransID>
    </HEADER>
    <ENVELOPE>
    

在文件名中,前 4 个部分(包括带有我要比较的字符串的部分)是相同的,而后 3 个部分会随着文件重试的过程日期和时间而变化。

字符串的每个实例最多可以重复 24 次。现在我必须手动确保我用眼睛抓住了字符串的每个实例,而且我并不总是相信那些 LOL。

我想生成一个没有重复的每个字符串的列表,然后将每个字符串分配给它自己的变量,以便稍后在脚本中使用。

只要它可以在 Bash shell 脚本中完成,我不在乎字符串是从文件名中提取的还是从 .XML 文档的内容中提取的。

4

1 回答 1

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
于 2012-10-18T05:31:27.727 回答