1

(file 1) の (file 2) のファイル名に含まれる任意の文字に対して awk を実行する最良の方法は何ですか?

これまでのコード:

$ sed -e 's/.*\ -\ //' -e 's/.mp3$//' File1.txt | while read z; do tit="$z" ; awk -v title="$tit" '{FS = "\t"} $2 ~ title {print $0}' File2.txt ; done

結果; ファイル名に ( が含まれるファイルにヒットした場合を除いて、機能しています。

考えられるすべてを一重引用符と二重引用符で囲んでみましたが、まだうまくいきません。

File1 : "Playlist" という名前で、区切り文字は " - " です。

  • ピーター・トッシュ - Na Goa Jail (Bonus Track).mp3

File1 フィールドは次のとおりです。「アーティスト」「タイトル」

File2:名前は「Master-List」、区切り文字はタブ

  • Peter Tosh Na Goa Jail 32000 /Music/Peter Tosh/Peter Tosh - Na Goa Jail (ボーナストラック.mp3

File2 フィールドは次のとおりです。「アーティスト」「タイトル」「ビットレート」「パス」

上記の例を使用すると...「プレイリスト」の各エントリに対して

  1. "Playlist" を使用して、Field1 と Field2 (アーティスト タイトル) の 2 つの変数を生成します。
  2. マスターリスト内で $title "Na Goa Jail (Bonus Track).mp3" を検索
  3. 一致する場合は、$artist も一致することを確認します
  4. $title と $artist が一致する場合は、Master-List の 4 番目の列を出力し、そうでない場合は "No Match" を出力します。
4

2 に答える 2

0
awk 'NR == FNR { artist[$1,$2]=1 ; next }          #Load the artiest/title file
     NR != FNR { if( artist[$1,$2] ) { print $4 }  #Check if artiest,title was loaded
                 else { print "no match" } }' artist-title artist-title-bitrate-path
于 2012-07-15T23:13:40.100 に答える
0

次のようにして、同じ(そしてより簡単な)ものを得ることができます。

sed -e 's/.*\ -\ //' -e 's/.mp3$//' File1.txt | while IFS='\n' read z; do grep "$z" File2.txt; done

ループに IFS (Internal Field Separator) を使用していることに注意してください。これは、デフォルトではspaceです。

于 2012-06-17T18:14:19.140 に答える