Как я могу объединить разные CSV-файлы из разных папок с именем каждого файла в качестве имени столбца в объединенном файле?

Это нормально, чтобы извлечь приложение узла в / opt / mynoDeaPlation ? Или есть лучшее место?

Это больше вопрос мнения, но я считаю, что ты в порядке. Стандарт для такого рода вещь - стандарт стандарт файловой системы стандарта , которая имеет более конкретных требований для / opt , но это ваши пакеты для ваших систем так .. [

Где я должен положить сценарий для запуска приложения? Я почти уверен / usr / local / bin - это не правильное место, поскольку скрипт не является «bin».

Если вы посмотрите на содержание / USR / BIN , вы увидите, что каталоги Ciredies содержат много скриптов; Точка ... / bin каталоги - только для содержения исполняемых команд, независимо от их деталей реализации. Таким образом, хранение скрипта в / usr / local / bin , чтобы ваше приложение было проще запустить, это нормально.

Есть ли лучший способ сделать все это? Может быть, не использует сценарий вообще?

Вы сможете на самом деле сделать исполняемый файл вашего узла напрямую, со следующей линией Shebang добавлена ​​в верхней части:

#!/usr/bin/env node

(см. https://stackoverflow.com/questions/24253027 / Node-and-Shebang-Help-Executing-VIA-Command-Line для получения подробной информации). Тогда вы можете переименовать вашу app.js , чтобы просто приложение и у пользователях работает пользователи напрямую ... (Это предполагает, что он может работать с рабочим каталогом, отличным от / opt / MynoDeaPlation .)

Если вы заинтересованы в приложениях уплотнения узла как .deb .deb , посмотрите NPM2DEB , он может пригодиться.

0
24.07.2015, 23:47
3 ответа

Это неожиданный ответ:

for dir in $(ls ); do echo " $dir - this is the directory"; for csv in $(ls $dir/*csv); do cat $csv|sed -e "s/\(.*\)/$dir, \1/g"; done;  done

Затем вы можете добавить параметры для указания имен файлов, например

for myfile in EA_sing EA_ska EA-tat; do for csv in $(ls $dir/$myfile*)...

, а затем перенаправьте их в файл по вашему выбору, например

do cat $csv|sed -e "s/\(.*\)/$dir, \1/g" >> $(echo "$myfile_complete.csv")

, который затем может быть объединен в что-то вроде этого:

for dir in aa bb cc dd; do for file in EA_sing EA_ska EA_tat; do for myfile in $(ls $dir/$file*);do echo "parsing $myfile"; cat $myfile | sed -e "s/\(.*\)/$dir,\1/g" >> $(echo "$file\_combined.csv"); done; done; done

Или более конкретно:

for dir in $(ls -d */); do for file in $(ls $dir*csv); do echo "this is my file $file"; cat $file|sed -e "s|\(.*\)|$(echo $dir|sed -e 's/\///g'), \1|g";done; done
0
28.01.2020, 04:56

Вам также следует рассмотреть возможность использования find - еще одного очень полезного подхода - например, посмотрите на:

find . -name "*csv" -exec grep "" {} + | sed -e 's/:/,/g' -e 's/\.\///g'

Это очень похоже на вопросы, описанные здесь: Объединить имя файла внутри файла CSV для каждой строки для нескольких файлов CSV ?

См. также:

https://stackoverflow.com/questions/12554698/display-content-of-all-files-with-their-filenames-with-cat

файлы-но-включают-имя-файла-как-заголовки

https://stackoverflow.com/questions/864316/how-to-pipe-list-of-files-returned-by-find-command-to-cat- to-view-all-the-files

0
28.01.2020, 04:56

Использование всегда правильного имени файла

for t in $(find. -iname "*.csv" | awk -F_ '{print $2}' | sort | uniq); do 
    awk -v OFS="," 'split(FILENAME,f,/[_.]/){print $0,f[4]}' $(find. -iname "*$t*.csv" | sort) > EA_$t.csv
done
0
28.01.2020, 04:56

Теги

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