我的bash脚本如下:
#!/bin/bash
if [ ! -f "$1" ]; then
exit
fi
while read line;do
str1="[GAC]*T"
num=$"(echo $line | tr -d -c 'T' | wc -m)"
for((i=0;i<$num;i++))do
echo $line | sed "s/$str1/&\n/" | head -n1 -q
str1="${str1}[GAC]*T"
done
str1="[GAC]*T"
done < "$1
虽然它应该正常工作(取文件名输入并逐行打印,直到字母T和下一个字母T等),然后打印到终端。
输入:
GATTT
ATCGT
输出:
GAT
GATT
GATTT
AT
ATCGT
当我使用带有| tee outputfile
的脚本时,输出文件是正确的但是当使用带有> outputfile
的脚本时,终端挂起/被卡住并且没有完成。此外,它适用于bash -x scriptname inputfile > outputfile
但仍与bash scriptname inputfile > outputfile
一致。
答案 0 :(得分:1)
我对原始脚本进行了修改,请尝试:
if [ ! -f "$1" ]; then
exit
fi
while IFS='' read -r line || [[ -n "$line" ]];do
str1="[GAC]*T"
num=$(echo $line | tr -d -c 'T' | wc -m)
for((i=0;i<$num;i++));do
echo $line | sed "s/$str1/&\n/" | head -n1 -q
str1="${str1}[GAC]*T"
done
str1="[GAC]*T"
done < "$1"
输入:
GATTT
ATCGT
此脚本输出:
GAT
GATT
GATTT
AT
ATCGT
对原始脚本所做的修改是:
行while read line; do
已更改为while IFS='' read -r line || [[ -n "$line" ]]; do
。我这样做的原因在此解释:Read a file line by line assigning the value to a variable
行num=$"(echo $line | tr -d -c 'T' | wc -m)"
已更改为num=$(echo $line | tr -d -c 'T' | wc -m)
行for((i=0;i<$num;i++))do
已更改为for((i=0;i<$num;i++));do
行done < "$1
已更改为done < "$1"
现在你可以:./scriptname inputfile > outputfile
答案 1 :(得分:0)
尝试:
axios.interceptors.response.use(
response => response,
error => {
const {status} = error.response;
if (status === 401 ) {
store.dispatch('snackBar', snackbarObj)
}
return Promise.reject(error);
}
)
而不是你的脚本。
需要一些可选的非Ts,然后是至少一个T并在T之后插入换行符。
sed -r 's/([^T]*T+)/\1\n/g' gatc.txt > outputfile
对于多行,要删除最后的空行:
cat gatc.txt
GATGATTGATTTATATCGT
sed -r 's/([^T]*T+)/\1\n/g' gatc.txt
GAT
GATT
GATTT
AT
AT
CGT