awkを使用して配列を確認してください。

awkを使用して配列を確認してください。

私の問題は、シェルスクリプトを介して特定の文字列が互いに順列であるかどうかを確認することです。

1.Nf3 c5 2.e4 Nc6
1.e4 c5 2.Nf3 Nc6

ご覧のとおり、配列は原子の部分文字列に基づいています。つまり、両方の文字列に順序に関係なく同じ部分文字列が含まれているかどうかを知りたいのです。

AWKは高度なテキスト処理用に設計されたプログラミング言語です。だから私の考えは、2つの文字列を配列に分割することです。

{1., Nf3, c5, 2., e4, Nc6}
{1., e4, c5, 2., Nf3, Nc6}

そして、両方が同じ要素を含むかどうかを比較します。しかし、これがawk方式に適しているかどうかはわかりません。

2番目の方法は、最初の文字列をパターンに分割し{1., Nf3, c5, 2., e4, Nc6}、2番目の文字列のすべてのパターンを検索し、対応する一致に基づいて新しい文字列を作成することです。最後に、新しい文字列が最初の文字列と同じであることを確認できます。この特定のテキスト処理のためにawkに他の方法はありますか?

ベストアンサー1

awk私はこれが正しいアプローチだとは思わない。文字列を分割して文字列要素を並べ替え、結果を比較します。

bash:

$ split_and_sort() { sed -r 's/\</\n/g' | sort; }

$ split_sort_and_compare() {
    if [ "$(split_and_sort <<< "$1")" = "$(split_and_sort <<< "$2")" ]
    then echo "Match"
    else echo "No match"
    fi
}

$ split_sort_and_compare "1.Nf3 c5 2.e4 Nc6" "1.e4 c5 2.Nf3 Nc6"
Match

$ split_sort_and_compare "1.Nf3 c5 2.e4 Nc6" "1.e4 c5 2.Nf3 Nc5"
No match

これは私が考えているものと文字列を分割して比較する方法の私の解釈を説明するためのおおよその例です。ルールに基づいてより複雑な機能を自分で作成してください。

おすすめ記事