朋友問我,有沒有可以把 fg_list_partial.png 轉成 fg.list_partial 的指令,我是隔天才收到訊息,而他已經用 echo filename | cut -d "." -f 1 | sed 's/_/./1' 來解決問題了。
我
看到訊息時,立馬想到的是 basename/awk ,而不是 sed/cut,所以我用 echo `basename
fg_list_partial.png .png '{printf("%s.%s_%s\n", $1, $2, $3);}'
來解,可是仔細想想,其實有缺點,第一個是多花一個指令去把檔名的副檔名去掉,第二個是不適合做大量的批次處理。因此我再仔細找了一下,看 awk
有沒有支援 multiple field separator,找著找著,反而看到了 split,這個也可以喔。最後我用 echo
"bg_list_full.png" | awk -F .
'{split($1,a,"_");printf("%s.%s_%s\n",a[1],a[2],a[3]);}' 來解決,這個方法除了少了
basename 指令之外,也很適合做批次處理,例如 ls ??_list_*.png | awk -F .
'{split($1,a,"_");printf("%s.%s_%s\n",a[1],a[2],a[3]);}' 。
沒有留言:
張貼留言