printf pwd для каждой строки переменной - PullRequest
0 голосов
/ 14 марта 2019

Я назначил несколько файлов переменной, и сейчас я пытаюсь распечатать эти файлы и путь к текстовому файлу.Однако он печатает только путь для первого файла, а не остальные файлы, включенные в переменную.

Это мой код:

dbs=$(ls | grep -E "BNST|STN|NAc")

printf '%s\n' "$PWD/${dbs}" > ${sub}_DBSnuclei.txt

Это результат:

/Users/sbaldi/Desktop/WORK_DATA/OCD/ROIs_warped/Sub002/Sub002_BNST_50_L.nii.gz
Sub002_BNST_50_R.nii.gz

Sub002_NAc_80_L.nii.gz

Sub002_NAc_80_R.nii.gz

Sub002_STN_20_L.nii.gz

Sub002_STN_20_R.nii.gz

Я хотел бы указать путь к каждому из файлов.Как мне это сделать?

Ответы [ 3 ]

0 голосов
/ 14 марта 2019

Используйте xargs только для этого:

<<<"$dbs" xargs -n1 printf "%s%s\n" "$(pwd)"

Для каждой строки в переменной $dbs будет выполняться printf "%s%s\n" <pwd output> <line>.

Протестировано на tutorialspoint .

0 голосов
/ 14 марта 2019

С простыми именами файлов в вашем примере вывода вы можете использовать

printf "$PWD/%s\n" $dbs

Проблема с вашим решением в том, что printf видит один аргумент. Один аргумент с одним $PWD в начале многострочной строки.

0 голосов
/ 14 марта 2019

Вы можете выполнить любое из следующих действий:

for i in *{BNST,STN,NAc}*; do echo "${PWD}/$i"; done
for i in *{BNST,STN,NAc}*; do readlink -f $i; done
find ${PWD} \( -name '*BNST*' -o -name '*STN*' -o -name '*NAc' \)
echo $PWD/*{BNST,STN,NAc}* | tr ' ' '\n'
find $PWD/*{BNST,STN,NAc}*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...