awk 从变量中删除字符串

ano*_*on1 3 awk

HP-UX *** B.11.31 U ia64 ***无限用户许可证

我想将当前目录中名为 abc.txt 的文件移动到名为 ./begperl 的目录。当我这样做时,我希望文件的移动版本被命名为 ab.txt。我想要的是从文件名中删除预定义的字符串并移动它,并根据第三个变量 = Y/ 删除原始文件N。我尝试过下面的oneliners但没有成功。

awk -v name=abc.txt -v dir=begperl 'BEGIN{ renamed_var=substr("c", "", name);system("mv " name  "./"dir/renamed_var)}' 

awk -v name=abc.txt -v dir=begperl 'BEGIN{ renamed_var=substr("c", "", name); print renamed_var}'

awk -v name=abc.txt -v dir=begperl 'BEGIN{ print substr("c", "", name) }'


awk -v name=abc.txt -v dir=begperl -v variable_two=substr("c", "", name){print variable_two}' 


awk -v name=abc.txt -v dir=begperl -v variable_two=substr("c", "", name){print variable_two}'
Run Code Online (Sandbox Code Playgroud)

我唯一能工作的班轮是

awk -v name=abc.txt -v dir=begperl 'BEGIN{ system("mv " name " ./"dir)}' 
Run Code Online (Sandbox Code Playgroud)

非常感谢

ste*_*ver 6

您需要sub(sub stitute ) 而不是substr(sub string ) 命令:compare

$ awk -v name="abc.txt" 'BEGIN {substr("c","",name) ; print name}'
abc.txt
Run Code Online (Sandbox Code Playgroud)

$ awk -v name="abc.txt" 'BEGIN {sub("c","",name) ; print name}'
ab.txt
Run Code Online (Sandbox Code Playgroud)

然而,除非您将其作为学习的编程练习awk,否则确实没有理由不使用 shell 来执行此类操作,例如bash

newname="${name%c.*}.${name##*.}"
Run Code Online (Sandbox Code Playgroud)

形成一个字符串,name以最短的尾随匹配开头c.,并与通过删除最长匹配部分形成的点扩展连接起来.