キーワードリストに基づいてファイルリストを並べ替え、番号順に並べ替え

キーワードリストに基づいてファイルリストを並べ替え、番号順に並べ替え

キーワードリストがありますkeywords.txt

cat & mouse
dog
mouse

ファイル内の長い画像ファイルのリストimages.txt

8284,cat-mouse.jpg001
8286,cat-mouse.jpg003
8285,cat-mouse.jpg002
50,mouse.jpg004
52,mouse.jpg003
1000,dog.jpg003
1003,dog.jpg002
1002,dog.jpg001
51,mouse.jpg002
53,mouse.jpg001

以下の画像のリストが必要です。

8284,cat-mouse.jpg001
8285,cat-mouse.jpg002
8286,cat-mouse.jpg003
1000,dog.jpg001
1002,dog.jpg002
1003,dog.jpg003
50,mouse.jpg001
51,mouse.jpg002
52,mouse.jpg003
53,mouse.jpg004

各キーワードの前の画像番号は,正しい数値順でなければならず、jpgxyz値は001などで始まる必要がありますが、キーワードリストが優先されるため、Tom and Jerry> Dog> Ratになります。キーワードリストには、画像ファイルが好きではない文字も含まれており、& ! ,キーワードが似ている可能性があります。たとえば、他のキーワードをdog2組み合わせることはできません。

ベストアンサー1

変換のための@Freddyの仮定に似ています。

OUTPUT=output.txt
IMAGES=images.txt
KEYS=keywords.txt

if [ -f $OUTPUT ]; then rm $OUTPUT; fi
while read KEY; do
    KEY=$(echo "$KEY" | sed -E -e 's/[)(&!,]/ /g ; s/ +/-/g')
    echo "key is ,$KEY."
    grep -Po "[0-9]+,$KEY\.jpg" $IMAGES | sort -k1 -n -t, | cat -n | while read  N F
    do
        echo $F$(printf "%03g" $N) | tee -a $OUTPUT
    done
    echo
done < $KEYS

生産する

key is ,cat-mouse.
8284,cat-mouse.jpg001
8285,cat-mouse.jpg002
8286,cat-mouse.jpg003

key is ,dog.
1000,dog.jpg001
1002,dog.jpg002
1003,dog.jpg003

key is ,mouse.
50,mouse.jpg001
51,mouse.jpg002
52,mouse.jpg003
53,mouse.jpg004
500,mouse.jpg005

STDOUTに変換しますが、空行とキーは出力ファイルに書き込まれません。

最後に、sort -k1 -n -t,各キーの出力を数値でソートする

500,mouse.jpg001
50,mouse.jpg002
51,mouse.jpg003
52,mouse.jpg004
53,mouse.jpg005

編集する

images.txt実行するには、およびを含むディレクトリに開いている端末にコードをコピーして貼り付けますkeywords.txt。出力はに記録されますoutput.txt。必要に応じてこの名前を変更してください。

それ以外の場合は、テキストファイルにコピーしてファイルがある場所に保存して実行可能にし、(chmod +x whateverYouCalledIt)コマンドラインで次のように入力してアクセスできます。./whateverYouCalledIt

上記と同じことを実行して$ PATHディレクトリに保存すると、どこでも実行できます。whateverYouCalledIt

良いこれ

()置き換える文字のリストにも追加されました。-

おすすめ記事