[英]GNU Parallel - How to capture the output in files with names using input argument
[英]How to derive output file names from sequential input files?
我已經為程序獲取了一堆文件,如下所示:
/work/xiaofenglu/science/myten.*.dump.gz
現在,我需要提取字符串myten.*
作為順序輸出文件的基本名稱。 我使用以下命令來處理此問題:
for inputfile in *.dump.gz
do
base_name='basename ${inputfile} .dump.gz'
done
但是,它沒有用。
使用參數擴展 :
#!/bin/bash
shopt -s nullglob
for f in /work/xiaofenglu/science/myten.*.dump.gz; do
base_name=${f%.dump.gz} # removes trailing .dump.gz
base_name=${base_name##*/} # removes everything up to last / found
printf 'Base name is: %s\n' "$base_name"
done
您的命令無效,因為您甚至都沒有調用命令basename
。 您只是將字符串base_name
定義為逐字字符串
basename ${inputfile} .dump.gz
因為單引號。 也許您在某處看到此命令:
base_name=`basename ${inputfile} .dump.gz`
並且您將反引號“與單引號'
混淆了。 使用反引號而不是單引號,該命令有效。 但是使用$(...)
構造代替反引號會更好:
base_name=$(basename "$inputfile" .dump.gz)
這稱為命令替換 。
但是我要說的是,調用外部進程的basename
來執行Bash可以很好地完成的事情是沒有用的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.