使用awk的Linux过滤器/排序输入

使用awk的Linux过滤器/排序输入,linux,awk,Linux,Awk,查找具有默认\u曲目:1(如果有)的字幕曲目,并输出曲目ID。在这种情况下,输出应为2 到目前为止,我有: awk '/: subtitles.*default_track:1/ {gsub(".*Track ID ", "", $0); gsub(" .*", "", $0); print $0 }' 这就给了我: 2: 但我在找这个: 2 以下是输入: File 'v.mkv': container: Matroska [duration:71255000000 segment_uid

查找具有
默认\u曲目:1
(如果有)的字幕曲目,并输出曲目ID。在这种情况下,输出应为
2

到目前为止,我有:

awk '/: subtitles.*default_track:1/ {gsub(".*Track ID ", "", $0); gsub(" .*", "", $0); print $0 }'
这就给了我:

2:
但我在找这个:

2
以下是输入:

File 'v.mkv': container: Matroska [duration:71255000000 segment_uid:833ce3259a9891d7030fd4c31dd10a32 is_providing_timecodes:1]
Track ID 0: video (DIV3) [number:1 uid:1568461043394572035 codec_id:V_MS/VFW/FOURCC codec_private_length:40 codec_private_data:280000008002000060010000010018004449563300500a0000000000000000000000000000000000 language:und pixel_dimensions:640x352 display_dimensions:640x352 default_track:1 forced_track:0 enabled_track:1 default_duration:41708375 tag_bps:1278655 tag_duration:00\c01\c09.778000000 tag_number_of_frames:1673 tag_number_of_bytes:11152757 tag__statistics_writing_app:mkvmerge\sv7.3.0\s('Nouages')\s64bit\sbuilt\son\sNov\s30\s2014\s09\c21\c17 tag__statistics_writing_date_utc:2014-11-30\s08\c22\c46 tag__statistics_tags:BPS\sDURATION\sNUMBER_OF_FRAMES\sNUMBER_OF_BYTES]
Track ID 1: audio (MP3) [number:2 uid:15602440298129597552 codec_id:A_MPEG/L3 codec_private_length:0 language:und default_track:1 forced_track:0 enabled_track:1 default_duration:24000000 audio_sampling_frequency:48000 audio_channels:2 tag_bps:224451 tag_duration:00\c01\c09.768000000 tag_number_of_frames:2907 tag_number_of_bytes:1957440 tag__statistics_writing_app:mkvmerge\sv7.3.0\s('Nouages')\s64bit\sbuilt\son\sNov\s30\s2014\s09\c21\c17 tag__statistics_writing_date_utc:2014-11-30\s08\c22\c46 tag__statistics_tags:BPS\sDURATION\sNUMBER_OF_FRAMES\sNUMBER_OF_BYTES]
Track ID 2: subtitles (SubRip/SRT) [number:3 uid:7565148441499248899 codec_id:S_TEXT/UTF8 codec_private_length:0 language:und default_track:1 forced_track:0 enabled_track:1 tag_bps:79 tag_duration:00\c01\c06.555000000 tag_number_of_frames:18 tag_number_of_bytes:664 tag__statistics_writing_app:mkvmerge\sv7.3.0\s('Nouages')\s64bit\sbuilt\son\sNov\s30\s2014\s09\c21\c17 tag__statistics_writing_date_utc:2014-11-30\s08\c22\c46 tag__statistics_tags:BPS\sDURATION\sNUMBER_OF_FRAMES\sNUMBER_OF_BYTES]
Track ID 3: subtitles (SubRip/SRT) [number:4 uid:10370072232421497499 codec_id:S_TEXT/UTF8 codec_private_length:0 language:und default_track:0 forced_track:0 enabled_track:1 tag_bps:70 tag_duration:00\c01\c06.555000000 tag_number_of_frames:18 tag_number_of_bytes:590 tag__statistics_writing_app:mkvmerge\sv7.3.0\s('Nouages')\s64bit\sbuilt\son\sNov\s30\s2014\s09\c21\c17 tag__statistics_writing_date_utc:2014-11-30\s08\c22\c46 tag__statistics_tags:BPS\sDURATION\sNUMBER_OF_FRAMES\sNUMBER_OF_BYTES]
…

这应该可以做到:

awk -F'[ :]+' '$4=="subtitles"&&/default_track:1[[:space:]]/{print $3}' yourfile
它将字段分隔符设置为也包含

模式部分检查两件事:第四个字段是否等于subtitles,以及
default\u track:1
是否在行中的某个位置

$ awk -F'[ :]' '/subtitles.*default_track:1/{print $3}' file
2
如果文件中可能有其他字符串包含
字幕
默认曲目:1
,则用单词边界将其包围,例如GNU awk:

$ awk -F'[ :]' '/\<subtitles\>.*\<default_track:1\>/{print $3}' file
2
$awk-F'[:]'/\.\\/{print$3}文件
2.

一个小的
+
可以解决您的问题:

awk '/: subtitles.*default_track:1/ {print +$3}' file
2

使用
+
0
添加到
2:
。这将仅获取值。

再添加一个子(/:/,“”,$0)?祝你好运。
awk'/:副标题。*默认曲目:1/{gsub(“:”,“”,$3);打印$3}'