0

映画のリストを含む入力ファイルがあります(繰り返しエントリがある場合があることに注意してください)。

American_beauty__1h56mn38s_
As_Good_As_It_Gets
As_Good_As_It_Gets
_DivX-ITA__Casablanca_M_CURTIZ_1942_Bogart-bergman_
Capote_EN_DVDRiP_XViD-GeT-AW
_DivX-ITA__Casablanca_M_CURTIZ_1942_Bogart-bergman_

最初のファイルの各エントリについて、別の参照ファイルから対応する一致(行番号)を見つけます。

American beauty.(1h56mn38s)
As Good As It Gets
Capote.EN.DVDRiP.XViD-GeT-AW
[DivX-ITA] Casablanca(M.CURTIZ 1942 Bogart-bergman)
Quills (2000)(7.4) 

必要な出力は次のようになります(参照ムービー+参照ファイルの行番号):

American beauty.(1h56mn38s) 1
As Good As It Gets 2
As Good As It Gets 2
[DivX-ITA] Casablanca(M.CURTIZ 1942 Bogart-bergman) 4
Capote.EN.DVDRiP.XViD-GeT-AW 3
[DivX-ITA] Casablanca(M.CURTIZ 1942 Bogart-bergman) 4

基本的に、両方のファイルのエントリの違いは、空白、括弧、ポイントなどの一部の文字がアンダースコアに置き換えられていることです。

誰かがそれに光を当てることができますか?

幸運をお祈りしています、

ハビエル

4

3 に答える 3

1

Awkは機能します:

gawk '
  NR == FNR {
    # read the reference file first, capture the line numbers and transform
    # the "real" title to one with underscores
    line[$0] = NR
    u = $0
    gsub(/[][ .()]/,"_",u)
    movie[u] = $0
    next
  }
  $0 in movie {
    print movie[$0] " " line[movie[$0]]
  }
' movies.reference movies.list

ハイフンもアンダースコアに変換された場合(その場合/\W/)、正規表現を簡略化できます。

于 2010-06-15T14:37:45.910 に答える
0

たぶん、sedを使用して(ファイルリストとテキストファイルの両方から)不要な文字をすべて削除することができますか?

例えば


ls | sed -e 's/[^a-z0-9]/o/gi'

または、よりあいまいなものが必要な場合は、処理されたファイル名(またはトークン化されたバージョン)に対して最小限の編集距離を試してみてください。

于 2010-06-15T09:19:43.620 に答える
0

これを試してみてください。特に高速ではありません。

#!/bin/bash
chars='[]() .'
num=0
while read -r line
do
    (( num++ ))
    num=$( grep --line-number "$line" <( tr "$chars" '_' < movies.reference ) | awk -F: '{print $1}' )
    echo "$( sed -n "$num{p;q}" movies.reference ) $num"
done < movies.input
于 2010-06-15T12:40:11.670 に答える