如何让Awk也显示字段分隔符?

时间:2014-03-19 11:40:25

标签: bash awk

我想使用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显示字段分隔符,还是可以用其他方式完成?

2 个答案:

答案 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上运行。)