Unix 如何使用awk进行文件复制。在awk中使用拆分复制不工作

Unix 如何使用awk进行文件复制。在awk中使用拆分复制不工作,unix,awk,Unix,Awk,我错过了一些微妙的东西。我试着在命令下运行,但不起作用。你能帮忙吗 ls | awk '{ split($1,a,".gz")} {cp " " $1 " " a[1]".gz"}' 虽然当我试图打印它是显示复制命令 ls | awk '{ split($1,a,".gz")} {print "cp" " " $1 " " a[1]".gz"}' 不知道问题出在哪里。任何指针都会有帮助为什么要使用awk?尝试: for f in *; do cp "$f" "${f%.gz*}.

我错过了一些微妙的东西。我试着在命令下运行,但不起作用。你能帮忙吗

ls | awk '{ split($1,a,".gz")} {cp " "   $1 " "  a[1]".gz"}'
虽然当我试图打印它是显示复制命令

ls | awk '{ split($1,a,".gz")} {print "cp" " "   $1 " "  a[1]".gz"}'

不知道问题出在哪里。任何指针都会有帮助

为什么要使用
awk
?尝试:

for f in *; do cp "$f" "${f%.gz*}.gz"; done

总结一些评论并指出第一个示例的错误:

ls | awk '{ split($1,a,".gz")} {cp " "   $1 " "  a[1]".gz"}'
                                ^ unassigned variable
cp
默认为“”,不作为程序
cp
处理。如果在包含一个文件的目录中执行以下操作,
test.gz\u monkey
,您将看到原因:

ls | awk '{split($1,a,".gz"); cmd=cp " " $1 " " a[1] ".gz"; print ">>" cmd "<<"  }'
另一件需要注意的事情是-
ls
对于只在当前目录中查找文件来说不是一个好的选择。相反,请尝试查找:

find . -type f -name "*.gz_*" | awk '{split($1,a,".gz"); cmd="cp  "$1" "a[1]".gz"; system(cmd) }'
就我个人而言,我认为以下内容更具可读性:

find . -type f -name "*.gz_*" | awk '{split($1,a,".gz"); system(sprintf( "cp %s %s.gz", $1, a[1])) }'

它应该做什么?试着解释一下。嗨,费多尔基/谢尔特,这是从2010年3月4月4月4月4月4月4月4月3月4月3月4月4月3月4月5 5 5 5 5 5 744月4月4月4月4月4月4月4月4月4月4月4月4月4月4月4月4月4月4月4月6月6月6月6月6月6月6月6月6月6月6日,这是从10月10月10月10月10月10月10月10月6月6月6月6月6日,北京北京北京北京北京北京北京北京北京北京北京北京北京北京北京北京北京北京北京市,你们你们你们你们们10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月6月10月10月6月6日,北京北京北京北京北京北京北京北京北京北京北京北京北京,,正如你所看到的,我试着把水泼洒在地上基于“.gz”的输出,我希望cp 20140306_ABC_TGR_20140306.gz_RD_20140307_053725_3355745 20140306_ABC_TGR_20140306.gz。这就是cp inside所做的。请学会在问题的主体中编辑像这样的重要信息。事实上,这是无法理解的。使用问题底部的
edit
链接,复制粘贴数据,并使用左上角的
{}
工具设置格式,使文本在每行上保持独立。请注意,您可以在输入框下方的显示中看到更改的“预览”。祝你好运。@EdMorton,你可以直接从awk和c调用shell命令
system(cmd)
两者都将执行shell命令。当然,我并没有说您不能调用
system()
来调用shell来执行shell命令-“我说您不能直接从awk调用shell命令…”这是相关的,因为这就是行动计划试图做的事。+1用于解读行动计划关于他试图做什么的评论!我看了好几次,都不明白他想告诉我们什么。
find . -type f -name "*.gz_*" | awk '{split($1,a,".gz"); cmd="cp  "$1" "a[1]".gz"; system(cmd) }'
find . -type f -name "*.gz_*" | awk '{split($1,a,".gz"); system(sprintf( "cp %s %s.gz", $1, a[1])) }'