如何在bash命令行上使用awk的输出

时间:2016-11-06 05:26:31

标签: linux bash shell awk batch-processing

我有一个名为“01 - Welcome to The Jungle.mp3”的文件,我想eyeD3 -t "Welcome To the Jungle" 01 - Welcome To The Jungle.mp3来修改文件夹中所有文件的标记。我用awk从文件中提取:“欢迎来到丛林”:

#!/bin/bash
for i in *.mp3
do
eyeD3 -t $(echo ${i} | awk -F' - ' '{print $2}' | awk -F'.' '{print $1}') ${i}
done

它不起作用。整个“$(echo S {i} ....)”和“$ {i}”似乎都无法替换相应文件的名称。

2 个答案:

答案 0 :(得分:1)

您需要通过shell防止total_time(默认:空格,制表符,换行符)上的单词拆分,因为您的输入文件名包含空格。典型的解决方法是在变量扩展周围使用双引号。

执行:

IFS

您可以利用此处字符串for i in *.mp3; do eyeD3 -t "$(echo "$i")" | ...; done 来避免<<<

echo

答案 1 :(得分:0)

你需要对可能包含空格的变量进行双引号,如@heemayl已经指出的那样。

此外,在此示例中,不使用awk, 最好使用本机Bash模式替换来提取标题,例如:

for file in *.mp3; do
    title=${file%.mp3}
    title=${title#?????}
    eyeD3 -t "$title" "$file"
done

那是:

  • 最后删除.mp3
  • 删除前5个字符(计数前缀NN -