1

对于 (file 2) 中 (file 1) 中的文件名中包含的任何字符,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:命名为“播放列表”,分隔符为:“-”

  • Peter Tosh - Na Goa Jail (Bonus Track).mp3

File1 字段为:“艺术家”“标题”

File2:命名为“Master-List”,分隔符为:tab

  • Peter Tosh Na Goa Jail 32000 /音乐/Peter Tosh/Peter Tosh - Na Goa Jail (Bonus Track.mp3

File2 字段为:“艺术家”“标题”“比特率”“路径”

使用上述示例...对于“播放列表”中的每个条目

  1. 使用“播放列表”为 Field1 和 Field2 生成 2 个变量(艺术家标题)
  2. 在 Master-List 中搜索 $title "Na Goa Jail (Bonus Track).mp3"
  3. 如果匹配,检查 $artist 是否也匹配
  4. 如果 $title 和 $artist 匹配,则打印 Master-List 中的第 4 列,否则打印“No Match”。
4

2 回答 2

0

您可以通过执行以下操作获得相同(并且更简单):

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

注意循环使用 IFS(内部字段分隔符),默认情况下是space

于 2012-06-17T18:14:19.140 回答
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 回答