bash-скрипт для выбора диска для dd (lsblk?)

Такой простой сценарий Bash должен работать, хотя могут быть и более короткие методы.

file1.txt:

sp|O15304|SIVA_HUMAN    MPKRSCPFADVAPLQLKVRVSQRELSRGVCAERYSQEVFEKTKRLLFLGAQAYLDHVWDEGCAVVHLPESPKPGPTGAPRAARGQMLIGPDGRLIRSLGQASEADPSGVASIACSSCVRAVDGKAVCGQCERALCGQCVRTCWGCGSVACTLCGLVDCSDMYEKVLCTSCAMFET 
tr|A0A1B1L9R9|A0A1B1L9R9_BACTU  MNKQLFLASLKETQKSILSYACGAALYLWLLIWIFPSMVSAKGLNELIAAMPDSVKKIVGMESPIQNVMDFLAGEYYSLLFIIILTIFCVTVATHLIARHVDKGAMAYLLATPVSRVQIAITQATVLILGLLIIVSVTYVAGLVGAEWFLQDNNLNKELFLKINIVGGLIFLVVSAYSFFFSCICNDERKALSYSASLTILFFVLDMVGKLSDKLEWMKNLSLFTLFRPKEIAEGAYNIWPVSIGLIAGALCIFIVAIVVFKKRDLPL

file2.txt:

tr|A0A1B1L9R9|A0A1B1L9R9_BACTU This is just an example 1-20-100

merge.sh:

fileone="file1.txt"
filetwo="file2.txt"
IFS=$'\n'
for line in `cat $fileone`; do
    #convert to array
    IFS=' '
    read -ra parts -d '' <<< "$line"

    other_text=$(cat $filetwo | sed -n -e "s/^${parts[0]} //p")
    echo "${parts[0]} $other_text ${parts[1]}"
done

Этот сценарий считывает file1.txtстроку за строкой, затем проверяет, содержится ли префикс ${parts[0]}во втором файле file2.txt, а затем объединяет строки вместе.

Как работает sed -n -e "s/^${parts[0]} //p:

  • -nозначает, что по умолчанию ничего не печатать.
  • За
  • -eследует команда sed.
  • s— команда замены шаблона.
  • Регулярное выражение ^${parts[0]будет соответствовать строкам, начинающимся с ${parts[0], который является нашим префиксом (, например;sp|O15304|SIVA_HUMAN).
  • Совпадение, т.е. sp|O15304|SIVA_HUMAN, заменяется пустой строкой.
  • pнапечатает преобразованную строку. (, который будет храниться в переменнойother_text)

Также см. это подробное объяснение этой конкретной sedкоманды.

Чтобы перенаправить вывод в файл, вы можете запустить ./merge.sh > output.txt. Вы можете сделать скрипт более гибким, установив fileone=$1и filetwo=$2и вместо этого указать файлы в качестве аргументов, например:./merge.sh file1.txt file2.txt

0
12.03.2021, 01:02
0 ответов

Теги

Похожие вопросы