[英]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.