如何实现首列为include/Include时将第二列文件复制到dir1目录?
问题:提取指定行的文件并复制到目标目录
问题场景
需要处理文本文件,当第一列为include或Include时,将第二列指定的文件复制到dir1目录,但现有脚本仅打印所有行,无法完成复制操作。
main_file 内容
lines here another line Include 'file1' include 'file2' endoffile
期望结果
file1 和 file2 被成功复制到dir1目录中
现有脚本
awk 'tolower($1)=="include"{cp $2 dir1}' main_file
问题原因与修复方案
awk本身不能直接执行系统命令cp,必须通过system()函数调用外部命令;另外原文件中第二列的文件名带有单引号,直接使用会导致shell解析错误,需要先去除引号。
修复后的脚本:
awk 'tolower($1)=="include"{ gsub(/'\''/,"",$2) # 移除第二列内容中的单引号 system("cp " $2 " dir1") }' main_file
关键说明
gsub(/'\''/,"",$2):利用正则替换,把$2里的单引号清空,避免shell将引号当成语法符号处理。system("cp " $2 " dir1"):通过awk的system函数调用系统的cp命令,完成文件复制。
内容的提问来源于stack exchange,提问作者EverLearner
相关产品推荐
相关产品推荐

