Добавить базовое имя в выходные файлы

. представляет текущий каталог. Упомянутая вами команда предоставит полные разрешения всем в вашем текущем каталоге. Точно так же ..представляет родительский каталог (на один каталог выше текущего ). Вы можете увидеть эти файлы, используяls -a

1
08.07.2020, 19:33
3 ответа

Вы используете переменную оболочки $sample_nameвнутри awk-скрипта, но awk не имеет доступа к этой переменной. Более того, поскольку он заключен в кавычки, awk будет рассматривать его как строку, которую вы видите. Вот рабочая версия вашего скрипта:

while IFS= read -r line
do
    tmp_header="tmp_header"
    echo "Processing $line"
    Sample_name=$(basename -s.fastq.gz "$line")
    gsutil cat "$line" | zcat | 
        awk -v sname="$Sample_name" '
            BEGIN {FS = ":"} 
            {
                lane=$4;
                fileName = sname".lane."lane".fastq.gz" 
                print > fileName
                for (i = 1; i <= 3; i++) {
                    getline
                    print > fileName
                }
            }'
done < test.list.paths.Bcancer2.txt
2
18.03.2021, 23:21

Переходя к тому, что кажется важным, у вас есть:

Sample_name=something
awk '{lane=$4 ; print > "${Sample_name}.lane."lane".fastq.gz";...}'
#   ^                   *                    *                     ^

и вы, вероятно, хотите, чтобы awk использовал значение переменной оболочки Sample_nameв имени файла. Оболочка не расширяет эту переменную, потому что она находится внутри одной строки -в кавычках. (А если бы он был в двойных -кавычках, вам нужно было бы избегать двойных -кавычек и знаков доллара в сценарии. )Awk также не расширяет это, потому что это строка в двойных кавычках в сценарии awk (и это синтаксис оболочки, а не синтаксис awk ).

Итак, самый простой способ сделать это — передать переменную оболочки в awk с помощью awk -vи использовать ее в сценарии awk, как вы сейчас используете line. Упрощенный пример:

Sample_name=foobar
awk -v SN="$Sample_name" 'BEGIN {lane=123; print SN ".lane." lane ".fastq.gz" }'

Запуск, который напечатает foobar.lane.123.fastq.gz.

2
18.03.2021, 23:21

Я уверен, что если вы замените одинарные кавычки двойными -кавычками и избежите кавычек внутри вашей awk-программы, вы будете намного счастливее. Кроме того, вы можете указать разделитель полей для запуска awk с помощью -F и избежать необходимости устанавливать его в блоке BEGIN, а вместо ввода cat $line | zcat...вы можете ввести zcat $line..., чтобы избежать бесполезного использования кот .

Надеюсь, это поможет!

-1
18.03.2021, 23:21

Теги

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