gpt4 book ai didi

linux - 无法使用变量扩展名在 bash 循环中分配正确的文件名

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:16 26 4
gpt4 key购买 nike

我被这个问题困住了。我正在使用循环将每个文件上的命令迭代到特定目录中。使用文件的原始名称生成新文件时,使用变量扩展名,只有在变量之前没有文本的情况下才有效。我有这段代码:

for f in temp/temp_orfs/* ; do
wc -l $f > ${f}_temp
gawk '{print $1}' ${f}_temp > temp/temp_orfs/num_${f}_text
done

${f}_temp ---> exists
num_${f}_text --> doesn't exists

我做错了什么?

最佳答案

f 包含 temp/temp_orfs 前缀,而不仅仅是目录中的文件名。假设 f 扩展为 temp/temp_orfs/foo;然后

  • ${f}_temp 扩展为 temp/temp_orfs/foo_temp
  • temp/temp_orfs/num_${f}_text 扩展为 temp/temp_orfs/num_temp/temp_orfs/foo_text

您需要基本名称:

for f in temp/temp_orfs/*; do
bf=${f##*/}
wc -l "$bf" | gawk '{print $1}' > "temp/temp_orfs/num_${bf}_text"
done

或者,您可以先更改目录:

cd temp/temp_orfs
for f in *; do
wc -l "$f" | gawk '{print $1}' > "temp/temp_orfs/num_${f}_text"

(无论哪种方式,临时文件都不是必需的,但如果您真的需要它,请务必注意它的名称,以便您知道它是在哪里创建的。)


awk 可能不是必需的。您可以使用输入重定向使 wc 输出只是行数,尽管结果的格式可能略有不同,具体取决于您使用的 wc 实现:

# GNU wc
$ wc -l < some_some_file
21

# BSD wc
$ wc -l < some_small_file
21

关于linux - 无法使用变量扩展名在 bash 循环中分配正确的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49697076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com