bash - 在bash中打印目录的文件名时出错
问题描述
所以我有这个基本程序,基本上它的作用是进入一个输入文件夹并打印那里的每个文件的名称和一个数字。问题是它打印文件的完整路径,我只想要文件的名称,并且由于某种原因,名称没有排序。
预期输出:
$ ./my_script.sh inputs bye 2
InputFile=test1.txt Num=1
InputFile=test1.txt Num=2
InputFile=test2.txt Num=1
InputFile=test2.txt Num=2
InputFile=test3.txt Num=1
InputFile=test3.txt Num=2
InputFile=test4.txt Num=1
InputFile=test4.txt Num=2
我的输出:
$ ./my_script.sh inputs bye 2
InputFile=inputs/test1.txt Num=1
InputFile=inputs/test1.txt Num=2
InputFile=inputs/test2.txt Num=1
InputFile=inputs/test2.txt Num=2
InputFile=inputs/test4.txt Num=1
InputFile=inputs/test4.txt Num=2
InputFile=inputs/test3.txt Num=1
InputFile=inputs/test3.txt Num=2
程序:
#!/bin/bash
Word1="${1}"
Word2="${2}"
Num="${3}"
for file in $(ls ${Word1}/*.txt)
do
for i in $(seq 1 ${Num})
do
echo "InputFile="${file} "Num="${i}
done
done
解决方案
不要解析 ls 的输出。而是使用 find 等:
find . -name "$word1*.txt" -printf "%f\n"
%f 将仅显示文件名。
您还可以利用 awk 来实现您所需要的。
find -name "$word1*" -printf "%f\n" | awk -v num=$3 '{ for (i=1;i<=num;i++) { print "InputFile="$0" Num="num }}'
将 find 命令的输出通过管道传输到 awk。从 1 循环到由 num 确定的数字(传递给 awk 并设置为传递参数 $3 的变量)以所需格式打印 find 的每一行输出。
推荐阅读
- vue.js - Nuxt:Vuex 从按钮单击更新数据不起作用。错误“无法读取未定义的属性‘结果’”
- rust - 在 Rust 中将 u64 乘以 u128 时出错?
- python - Sudoku Solver 在 Python 中提供部分解决方案:为什么?
- android - 如何将我的自定义视图迁移到 Jetpack Compose?
- c++ - 派生类中的私有函数被基类指针调用
- python - 如何在python上读取数据excel数据?
- php - 如果您从不同的域发送请求,则不会设置 cookie
- amazon-web-services - 在“将 DynamoDB 表导出到 S3”模板中的 Aws 数据管道中映射减少计数器
- reactjs - import' 和 'export' 只能出现在顶层 (5:2)
- r - ctree(partykit):如何在终端节点中显示水平箱线图以进行多元响应