首页 > 解决方案 > Grep Result 过滤双重结果

问题描述

我只需要从 grep 中提取第一个 Ita 音频:

ffprobe -i La.casa.nera.1991.FULL.HD.1080p.DTS+AC3.ITAENG.SUB.LFi.mkv 2>&1 | grep "Stream" | grep -v "Video" | grep -v "Subtitle"  | grep  "ac3" | egrep "(Ita)|(ita)|Italian|Italiano|italian|italiano|Eng|eng|English|english"

结果 :

Stream #0:2(ita): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s
Stream #0:4(ita): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s
Stream #0:6(eng): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s

我只需要像这样的第一个 ita 音频:

Stream #0:2(ita): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s
Stream #0:6(eng): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s

可以提供帮助,最好的问候

标签: bashffprobe

解决方案


目前还不清楚你在问什么。对于您拥有的样本,uniq -s12可以解决问题:

ffprobe -i La.casa.nera.1991.FULL.HD.1080p.DTS+AC3.ITAENG.SUB.LFi.mkv 2>&1 | grep "Stream" | grep -v "Video" | grep -v "Subtitle"  | grep  "ac3" | egrep "(Ita)|(ita)|Italian|Italiano|italian|italiano|Eng|eng|English|english" | uniq -s12

Stream #0:2(ita): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s
Stream #0:6(eng): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s

解释:

  • -s指示 uniq 跳过前 12 个字符,因此 uniqnes 将仅考虑(ita): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s

但是,如果 2 个意大利流具有不同的频率或其他属性,则可能需要 awk 命令:

awk  '!a[substr($2,6,length($2)-7)]++'
Stream #0:2(ita): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s
Stream #0:6(eng): Audio: ac3, 48000 Hz, stereo, fltp, 640 kb/s

解释:

  • $2#0:2(ita)例如选择第二个字段
  • substr提取ita部分(因为我不确定命令输出,我假设它ita可能具有可变长度
  • !a[..]- 仅当a字典还没有条目时打印

推荐阅读