Reputation: 651
Looking for subtitle track that has default_track:1
(if any), and output the Track ID. In this case the output should be 2
So far I have this:
awk '/: subtitles.*default_track:1/ {gsub(".*Track ID ", "", $0); gsub(" .*", "", $0); print $0 }'
Which gives me this:
2:
But I'm looking for this:
2
Here is the input:
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]
…
Upvotes: 0
Views: 61
Reputation: 41460
A small +
fixes your problem:
awk '/: subtitles.*default_track:1/ {print +$3}' file
2
Using +
it will add 0
to 2:
. This will get the value only.
Upvotes: 0
Reputation: 204164
$ awk -F'[ :]' '/subtitles.*default_track:1/{print $3}' file
2
If there can be other strings in your file that contain subtitles
or default_track:1
then surround them with word boundaries, e.g. with GNU awk:
$ awk -F'[ :]' '/\<subtitles\>.*\<default_track:1\>/{print $3}' file
2
Upvotes: 0
Reputation: 4841
This should do the trick:
awk -F'[ :]+' '$4=="subtitles"&&/default_track:1[[:space:]]/{print $3}' yourfile
It sets the field separator to also have :
included.
The PATTERN-part checks two things: If the fourth field equals subtitles, and if default_track:1
is somewhere in the line.
Upvotes: 1