将 _Variable_ 文件夹名称添加到文件列表之前

将 _Variable_ 文件夹名称添加到文件列表之前

给定一个文本文件,其中包含:

AF002 AI003 AA001 AD005 AD006 AI002 …

(由记录分隔符分隔)

生成包含以下内容的文本文件:

AF/AF002.jpg
AI/AI003.jpg
AA/AA001.jpg
AD/AD005.jpg
AD/AD006.jpg
AI/AI002.jpg

(由相同的记录分隔符分隔)

换句话说,从文件名的前两个字母推断路径,并附加 .jpg

另一个所需的功能是,由于我将处理大量此类文件,因此要测试输入文件中的前三个条目是否为 [AF][AZ][0-1]。这将防止我意外地将脚本应用到输出文件,因为第三个字符 (/) 会使测试失败。

我一直在尝试创建一个 AWK 脚本来在我的 iMac 上执行此操作,但似乎连最简单的操作都无法完成。我希望将脚本放在单独的命令文件中。我面临最后期限。

答案1

像这样 :

#!/bin/bash

str=$(<file)

for i in $str; do
    if [[ $i =~ ^[A-F][A-Z][0-1] ]]; then
        echo "${i:0:2}/$i.jpg"
    fi
done

 输出

AF/AF002.jpg
AI/AI003.jpg
AA/AA001.jpg
AD/AD005.jpg
AD/AD006.jpg
AI/AI002.jpg

答案2

尝试这个,

awk '{for (i=1;i<=NF;i++) print substr($i,1,2)"/"$i".jpg" }' file.txt

AF/AF002.jpg
AI/AI003.jpg
AA/AA001.jpg
AD/AD005.jpg
AD/AD006.jpg
AI/AI002.jpg
  • for循环每个字段。
  • substring打印每个字段的前 2 个字符。

答案3

perl -pne "s/ /\n/g" p| awk '{print substr($1,1,2)"/"$0".jpg"}' 

输出

AF/AF002.jpg
AI/AI003.jpg
AA/AA001.jpg
AD/AD005.jpg
AD/AD006.jpg
AI/AI002.jpg

答案4

假设这separated by record separators意味着您的输入字符串实际上是换行符分隔的:

$ awk '/^[A-F][A-Z][0-1]/{print substr($0,1,2) "/" $0 ".jpg"}' file
AF/AF002.jpg
AI/AI003.jpg
AA/AA001.jpg
AD/AD005.jpg
AD/AD006.jpg
AI/AI002.jpg

如果没有,则使用 GNU awk 进行多字符 RS:

$ awk -v RS='[[:space:]]+' '/^[A-F][A-Z][0-1]/{print substr($0,1,2) "/" $0 ".jpg"}' file
AF/AF002.jpg
AI/AI003.jpg
AA/AA001.jpg
AD/AD005.jpg
AD/AD006.jpg
AI/AI002.jpg

或者使用任何 awk 选择:

$ awk -v RS=' ' '/^[A-F][A-Z][0-1]/{sub(/\n/,""); print substr($0,1,2) "/" $0 ".jpg"}' file
AF/AF002.jpg
AI/AI003.jpg
AA/AA001.jpg
AD/AD005.jpg
AD/AD006.jpg
AI/AI002.jpg

$ awk '{for (i=1;i<=NF;i++) if ($i ~ /^[A-F][A-Z][0-1]/) print substr($i,1,2) "/" $i ".jpg"}' file
AF/AF002.jpg
AI/AI003.jpg
AA/AA001.jpg
AD/AD005.jpg
AD/AD006.jpg
AI/AI002.jpg

$ tr ' ' $'\n' < file | awk '/^[A-F][A-Z][0-1]/{print substr($0,1,2) "/" $0 ".jpg"}'
AF/AF002.jpg
AI/AI003.jpg
AA/AA001.jpg
AD/AD005.jpg
AD/AD006.jpg
AI/AI002.jpg

相关内容