尝试将匹配文件名模式“_base.txt”的文件内容大写;然后将结果输出到另一个文件夹,其中原始文件名加上最后的“_cap.txt”。
我计划通过 3,000 个文件来做到这一点。所以我目前正在对几个文件进行测试。
首先,我能够将内容大写。但是所有输出结果都没有被重定向。
BASE="/home/dir/input/"
find "$BASE" -type f -iname "*.txt" -exec awk '{print toupper($0)}' {} +
然后我添加了以下内容,这使我可以输出到以“_cap.txt”结尾的新文件名
BASE="/home/dir/input/"
find "$BASE" -type f -iname "*_pv_bind_basefile.txt" -exec awk '{print toupper($0) >> (FILENAME "_cap.txt")}' {} +
当我尝试输出到特定文件夹时出现问题
BASE="/home/dir/input/"
OUT_FOLDER="/home/dir/output/"
find "$BASE" -type f -iname "*_pv_bind_basefile.txt" -exec awk '{print toupper($0) >> ($OUT_FOLDER FILENAME "_cap.txt")}' {} +
我收到以下错误消息
awk:非法字段$(),名称“OUT_FOLDER”输入记录号1,文件/home/dir/input/TAB1.a1.001.txt源行号1
我尝试了几次迭代来输出文件并在几个小时后悲惨地失败了......这一定是我忽略或不知道如何做的一些简单的事情。任何建议将不胜感激。谢谢你。
Shell 变量和 awk 变量是不同的东西。
如果您将变量导出到环境,您可以通过 awk 的
ENVIRON
数组访问它 - 所以您可以这样做(注意:我省略了find
,因为它不是问题的核心)-v
或者,您可以使用选项传递变量