Вы можете переосмыслить всю концепцию. Это простой фрагмент, который поможет вам двигаться вперед.
#!/usr/bin/env bash
a=1
b=45
while read -p 'Please answer: ' answer
do
re=$(printf '%s\n' "$answer" | tr -dc '[[:digit:]]')
if ((re < a || re > b)); then
read -p 'Please answer: ' $re
else
echo "Loop ended"
exit
fi
done
#!/bin/bash
sample_dir="/C/Users/testuser/Desktop/sample"
out_file="/C/Users/testuser/Desktop/sample/output.tsv"
for file in "$sample_dir"/*
do
count=0
while read line; do
if [[ "$line" == "##"* ]] || [[ "$line" == "#"* ]]; then
count=$((count+1))
if [[ count -ge 4 ]]; then
echo -e "" >> $out_file
continue 2
fi
continue
else
echo -e "$line" >> $out_file
fi
done < $file
done
Используйтеawk
:
awk 'FNR==1{p=0}
FNR==1 && NR>1 {print ""}
$0 ~ /^##/ {p++}
p==1 && $0 !~ /^#/
' sample*
Выход:
18097D-02-01_bin.11.fa 1.295179372
18097D-02-01_bin.13.fa 1.284880274
18097D-02-01_bin.15.fa 1.339609918
18097D-02-02_bin.11.fa 1.59665286
18097D-02-02_bin.13.fa 1.332990306
18097D-02-02_bin.14.fa 1.499196606
18097D-02-02_bin.6.fa 1.323465715
18097D-02-02_bin.9.fa 1.583302299
Пояснение:
FNR==1{p=0}
установить указатель на 0 для каждого нового файла(FNR
это номер строки текущего файла)FNR==1 && NR>1 {print ""}
Печатать пустую строку для каждого файла, кроме первого $0 ~ /^##/ {p++}
Если строка начинается с ##, увеличьте указатель p==1 && $0 !~ /^#/
Если указатель равен 1 (, что имеет место в случае от первого ##
до второго ##
, и строка не начинается с #
, выведите ее.