提取列的一部分以生成cp命令

问题描述 投票:0回答:1

我希望创建复制命令,以在不删除后缀日期的情况下将文件从一个目录复制到目录中。有多个文件。

例如文件LOAN.DAILY.20191204

想要创建命令

cp LOAN.DAILY.20191204 ../LOAN.DAILY

我的尝试

ls -lrt | awk ' /DAILY/{ print "cp " , $9 , "../" , sub(/\.20191204$/,""); $9) }'

获取o / p

cp  LOAN.DAILY.20191204 ../ 1

为什么这个1要来

awk sed
1个回答
0
投票

根据https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html

如上所述,sub()的第三个参数必须是变量,字段或数组元素。某些版本的awk允许第三个参数成为不是左值的表达式。在这种情况下,sub()仍然会搜索模式并返回零或一,但是替换的结果(如果有的话)会被丢弃,因为没有放置它的位置。

因此,如果要修改第九列的值,则需要在sub调用中指定它:

ls -lrt | awk ' /DAILY/{ orig=$9; sub(/\.20191204$/,"", $9); print "cp " , orig , "../", $9 }'
© www.soinside.com 2019 - 2024. All rights reserved.