Для создания отдельных файлов csv -:
$ find /Volumes/My\ Book\ Studio/ -type f -name 'allMovement_Regressors.txt' \
-exec bash -c 'tr -s "[:blank:]" "," < "$1" > "${1%.txt}.csv"' tocsv {} \;
«tocsv» будет отображаться в вашем списке процессов как имя сценария bash -в файле exec.
Если вы знаете количество каталогов с «allMovement _Regressors.txt», вы можете написать строку заголовка -следующим образом (заменить X на правильное число):
printf '%s,' {1..X}_{1..12} | sed 's/,$/\n/' > ofile.csv
И собрать их воедино:
$ find /Volumes/My\ Book\ Studio/ -type f -name 'allMovement_Regressors.csv' -print0 \
| sort -z \
| xargs -0 paste \
| tr '\t' ',' >> ofile.csv
Обратите внимание, что перед paste
объединением файлов файлы будут отсортированы по номерам. Я использую здесь -print0
, потому что в ваших именах файлов есть пробелы. paste
будет разделять столбцы символом табуляции -, который вам не нужен в вашем CSV, поэтому нам также нужно заменить его.
Обновление
@bu5hman ответил, как создать заголовок. Я полностью украду это! Обязательно проголосуйте за ответ @bu5hman, если вам нравится мой:-)
Объедините оба наших ответа, напишите сценарий thingy.sh
, который вы можете передать-exec
:
#!/bin/bash
t=$(echo "$1" | grep -Po "(?<=/)[0-9]+(?=/)")
u=$(echo 1_$(seq -s " ${t}_" $(cat "$1" | awk "{print NF}")))
sed "i \\$u" "$1" \
| tr -s "[:blank:]" "," > "${1%.txt}.csv"
Затем подайте его на-exec
:
find Volumes/My\ Book\ Studio/ -type f -name 'allMovement_Regressors.txt' \
-exec /path/to/thingy.sh {} \;
А затем соедините вещи с моей второйfind
-командой.
Из справочной страницы lsblk
:
The command prints all block devices (except RAM disks) in a tree-like format by default.
Это не баг, это фича!:-)
Если вы хотите включить устройства оперативной памяти, вы можете сделать это с помощьюlsblk -I 1
lsblk -I 1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
ram0 1:0 0 9,8M 0 disk
ram1 1:1 0 9,8M 0 disk
ram2 1:2 0 9,8M 0 disk
...