用于从文件名或XML文档内容中提取唯一字符串的Shell脚本

时间:2012-10-18 04:17:09

标签: bash shell xml-parsing compare

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

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

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

    AVAILITY.VT04.00090.0082230958089736545.72732411.20121017.053604220
    
  2. 在XML文档中

    <ENVELOPE>
    <HEADER>
    <ProviderTransID>0082230958089736545</ProviderTransID>
    </HEADER>
    <ENVELOPE>
    
  3. 在文件名中,前4个部分(包括我想要比较的字符串的部分)是相同的,而后3个部分会更改,因为它们标识了重试文件的进程日期和时间。

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

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

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

1 个答案:

答案 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