我想使用awk来获取目录中某些文件的更干净的输出。我的问题是它们看起来不同,我也想看到分隔符。
name.name.name.name.PDTV.x264-DEADPOOL.mp4
name.name.name.name.PDTV.x264-C4TV.mp4
name.S07E10.HDTV.x264-ASAP.mp4
name.name.S03E11.HDTV.x264-ASAP.mp4
name.name.S03E12.HDTV.x264-EVOLVE.mp4
name.name.2x01.HDTV_x264-FoV.[VTV].mp4
到目前为止,我一直在使用awk -F"[xE][0-9]" '{print $1}'<<<$list
和类似的但它会输出...
name.S07
name.name.S03
name.name.2
我希望它也输出FS或在这种情况下输出E10。如... ..
name.S07E10
name.name.S03E11
name.name.2x01
有没有办法让awk显示字段分隔符,还是可以用其他方式完成?
答案 0 :(得分:4)
此gnu awk
可能有效:
awk -v RS="([xE][0-9][0-9])|\n" '{$1=$1} /name/ {print $0,RT}' file
name.name.name.name.PDTV. x26
name.name.name.name.PDTV. x26
name.S07 E10
name.name.S03 E11
name.name.S03 E12
name.name.2 x01
我在这里使用RT
代替RS
。
以下是使用awk
awk ' {f=match($0,/[xE][0-9][0-9]/)} f {print substr($0,1,f-1),substr($0,f,3)}' file
name.name.name.name.PDTV. x26
name.name.name.name.PDTV. x26
name.S07 E10
name.name.S03 E11
name.name.S03 E12
name.name.2 x01
答案 1 :(得分:2)
我建议改用sed
,这简化了事情:
sed -En 's/^(.+)([xE][0-9]+)\..+/\1\2/p' file
请注意,这会忽略不包含剧集编号的行,就像您的示例输出所示。
如果您要处理所有行 - 即使那些不包含剧集编号的行 - 请使用:
sed -E 's/^(.+)\.[HP]DTV.*/\1/' file
这将简单地删除以.HDTV
或.PDTV
开头的后缀。
(兼容性说明:使用-E
代替-r
使命令可以在Linux和OSX上运行。)