.
представляет текущий каталог. Упомянутая вами команда предоставит полные разрешения всем в вашем текущем каталоге. Точно так же ..
представляет родительский каталог (на один каталог выше текущего ). Вы можете увидеть эти файлы, используяls -a
Вы используете переменную оболочки $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
Переходя к тому, что кажется важным, у вас есть:
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
.
Я уверен, что если вы замените одинарные кавычки двойными -кавычками и избежите кавычек внутри вашей awk-программы, вы будете намного счастливее. Кроме того, вы можете указать разделитель полей для запуска awk с помощью -F и избежать необходимости устанавливать его в блоке BEGIN, а вместо ввода cat $line | zcat...
вы можете ввести zcat $line...
, чтобы избежать бесполезного использования кот .
Надеюсь, это поможет!