Awk распечатать имя файла в течение цикла - PullRequest
0 голосов
/ 15 января 2020

Я использую for-l oop для нескольких файлов, расположенных в каталоге. Каждая команда в for-l oop добавляет прежний .txt с новым столбцом. В настоящее время 3-я строка в for l oop создает столбец с путем к файлу, но я хочу только имя файла - мне тоже не нужно расширение файла. Я поиграл с разделением и передачей в awk, но не повезло.

После настройки команды awk, чтобы получить только имя файла, я хочу затем создать основной файл .txt, который содержит все зацикленные значения. По сути, я думаю, что мне нужно будет добавить файл .txt с выводом каждого l oop. Прямо сейчас это то, что я пытаюсь сделать с каналом в третьей строке для l oop, но он просто создает пустой файл .txt.

for file in ~/Desktop/test/*bam
do
    bedtools multicov -bams "$file" -bed bed_for_multicov.bed >  "${file%%_RRemoved.bam}_counts.txt"
    awk '{print $0,a}' a="$(samtools view -c "$file")" ${file%%_RRemoved.bam}_counts.txt > ${file%%_RRemoved.bam}_CPMcounts.txt
    awk -v var="$file" '{print $0, var}' ${file%%_RRemoved.bam}_CPMcounts.txt > ${file%%_RRemoved.bam}_CPMcounts2.txt | >> CPMcountsMaster.txt
done

Текущий выходной файл filename__CPMcounts2.txt

chr1    11088   11488   peak_1  192 4409922 path/to/filename1.bam
chr1    20674   21215   peak_2  217 4409922 path/to/filename1.bam
chr1    28550   28862   peak_3  170 4409922 path/to/filename1.bam
chr1    29582   30300   peak_4  437 4409922 path/to/filename1.bam
chr1    30635   31720   peak_5  696 4409922 path/to/filename1.bam
chr1    32373   35541   peak_6  2877 4409922 path/to/filename1.bam

Текущее имя файла 2_CPMcounts2.txt

chr1    11088   11488   peak_1  293 5888360 path/to/filename2.bam
chr1    20674   21215   peak_2  439 5888360 path/to/filename2.bam
chr1    28550   28862   peak_3  392 5888360 path/to/filename2.bam
chr1    29582   30300   peak_4  901 5888360 path/to/filename2.bam

Желаемое имя файла 1_CPMCounts2.txt

chr1    11088   11488   peak_1  192 4409922 filename1
chr1    20674   21215   peak_2  217 4409922 filename1
chr1    28550   28862   peak_3  170 4409922 filename1
chr1    29582   30300   peak_4  437 4409922 filename1
chr1    30635   31720   peak_5  696 4409922 filename1
chr1    32373   35541   peak_6  2877 4409922 filename1

Требуемое окончательное значение CPMcountsMaster.txt

chr1    11088   11488   peak_1  192 4409922 filename1
chr1    20674   21215   peak_2  217 4409922 filename1
chr1    28550   28862   peak_3  170 4409922 filename1
chr1    29582   30300   peak_4  437 4409922 filename1
chr1    30635   31720   peak_5  696 4409922 filename1
chr1    32373   35541   peak_6  2877 4409922 filename1
chr1    11088   11488   peak_1  293 5888360 filename2
chr1    20674   21215   peak_2  439 5888360 filename2
chr1    28550   28862   peak_3  392 5888360 filename2
chr1    29582   30300   peak_4  901 5888360 filename2

1 Ответ

0 голосов
/ 15 января 2020

Следующие работы, адаптированные из комментария Дж. Леффлера - спасибо!

for file in ~/Desktop/test/*bam
do
    bedtools multicov -bams "$file" -bed bed_for_multicov.bed >  "${file%%_RRemoved.bam}_counts.txt"
    awk '{print $0,a}' a="$(basename "$file" _RRemoved.bam)" ${file%%_RRemoved.bam}_CPMcounts.txt > ${file%%_RRemoved.bam}_CPMcounts2.txt
    awk '{print $0,a}' a="$(basename "$file" _RRemoved.bam)" ${file%%_RRemoved.bam}_CPMcounts.txt >> CPMcountsMaster.txt
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...