我在調整以前問題的答案時遇到了一些問題,所以我希望可以寫一個具體的解決方案。
我有一個包含 fasta 格式的 RNA 讀取的檔案,但是讀取名稱的結尾被弄亂了,所以我需要更正它。
將零填充到字串中間是一項簡單的任務,但是我無法讓它作業,因為我還需要確定問題的長度和位置。
我的讀取檔案頭如下所示:
@V350037327L1C001R0010000023/1_U1
我需要搜索“/1_U”,然后將零填充到該行的其余部分,總長度為 6。它看起來像這樣:
@V350037327L1C001R0010000023/1_U000001
最終長度應為“/1_U”之后的六個。例如:輸入:
@V350037327L1C001R0010000055/1_U300 = /1_U000300
@V350037327L1C001R0010000122/1_U45000 = /1_U045000
我嘗試過使用 awk,但是我無法讓它檢查初始長度,因此無法填充正確數量的零。
提前感謝您,并感謝您在此論壇中的無休止支持
uj5u.com熱心網友回復:
試試這個:
#! /bin/bash
files=('@V350037327L1C001R0010000023/1_U1'
'@V350037327L1C001R0010000055/1_U300'
'@V350037327L1C001R0010000122/1_U45000')
for file in "${files[@]}"; do
if [[ $file =~ ^(.*U)([0-9] )$ ]]; then
printf '%sd\n' "${BASH_REMATCH[@]:1}"
fi
done
更新:這從標準輸入讀取檔案。
#! /bin/bash
while read -r file; do
if [[ $file =~ ^(.*U)([0-9] )$ ]]; then
printf '%sd\n' "${BASH_REMATCH[@]:1}"
fi
done
更新 2:在開始撰寫 shell之前,你應該真正學習 shell 編程的基礎知識。典型的基礎是條件構造。
#! /bin/bash
while read -f file; do
if [[ $file =~ ^(.*U)([0-9] )$ ]]; then
printf '%sd\n' "${BASH_REMATCH[@]:1}"
else
printf '%s\n' "$file"
fi
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409666.html
標籤:
