Хотя цикл, чтобы найти потенциальные рамки для чтения - PullRequest
0 голосов
/ 10 октября 2019

Я хочу создать цикл "while read line", который построчно читает содержимое моего файла и выполняет серию команд.

Отправленный код - это то, что я пробовал до сих пор. Тем не менее, у меня возникли проблемы с запуском цикла, потому что я получаю сообщение об ошибке «имя файла слишком велико». Я новичок в кодировании, поэтому я даже не уверен, что этот код будет работать, если представленная проблема не была проблемой в первую очередь. Кроме того, я хотел бы знать, как ввести мои результаты из цикла в один файл. Спасибо за время.

FILE=$(cat RFn2.txt)

while read line

do

sed 's/atg/@atg/g'
sed 's/tag/tag#/g'
sed 's/tga/tga#/g'
sed 's/taa/taa#/g'
perl -lne 'print for /@(.*?)#/g' 

fi

done > $FILE

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Вы на правильном пути. в вашем цикле вам просто нужно отобразить содержимое строки файла.

FILE=RFn2.txt

while read line ; do

echo $line | sed 's/atg/@atg/g'| 
    sed 's/tag/tag#/g'| 
    sed 's/tga/tga#/g' | 
    sed 's/taa/taa#/g' | 
    perl -lne 'print for /@(.*?)#/g')" 

fi

done > $FILE
0 голосов
/ 10 октября 2019

sed можно использовать для замены файла на месте. т.е. нет необходимости разбирать построчно. Если это работает для вас, пожалуйста, обратитесь к переменные sed заменяйте при чтении строк обсуждение.

Если вам нужно проанализировать построчно, попробуйте код ниже. Обратите внимание, что я не смог протестировать perl часть. Но это должно работать, если вы раскомментируете код. Ниже фрагмент кода создаст новый файл RFn2_new.txt

  • cat $FILE выводит содержимое файла. | перенаправляет вывод в качестве входных данных в цикл while.
  • Для каждой строки выход echo $line перенаправляется в серии команд sed и perl.
  • Каждый выходиз цикла while перенаправляется в новый файл $ FILE_NEW
FILE=RFn2.txt
NEW_FILE=RFn2_new.txt

cat $FILE | while read -r line

do

echo $line | sed 's/atg/@atg/g' |
                sed 's/tag/tag#/g' |
                sed 's/tga/tga#/g' |
                sed 's/taa/taa#/g' #|
                #perl -lne 'print for /@(.*?)#/g'

done  > $NEW_FILE
...