0

bash シェル スクリプトを使用して、ファイルのディレクトリ リストを取得し、特定の文字列の一意のインスタンスのみをリストしたいと考えています。

文字列 (例: 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 シェル スクリプトで実行できる限り、文字列がファイル名から抽出されるか、.XML ドキュメントのコンテンツから抽出されるかは気にしません。

4

1 に答える 1

2

このメソッドは、ファイル名のみにアクセスします。次のいずれかをシェル スクリプトに追加します。

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 に答える