尝试大写与文件名模式“ _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
,因为它不是问题的中心)
export OUT_FOLDER="/home/dir/output/"
awk '{print toupper($0) >> ENVIRON["OUT_FOLDER"] FILENAME "_cap.txt"}'
另外,您可以使用-v
选项传递变量
OUT_FOLDER="/home/dir/output/"
awk -v out_folder="$OUT_FOLDER" '{print toupper($0) >> out_folder FILENAME "_cap.txt"}'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句