簡體   English   中英

無法使用變量擴展名在bash循環中分配正確的文件名

[英]Can't assign proper filenames in bash loop using variable extension

我被困在這個問題上。 我正在使用循環將每個文件上的命令迭代到特定目錄。 在使用文件的原始名稱來生成新文件時,使用變量擴展名,僅當變量之前沒有文本時才起作用。 我有以下代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM