Пересмотр скрипта BASH для работы с любым файлом, которому я говорю - PullRequest
2 голосов
/ 28 октября 2011

Я написал скрипт bash для запуска ряда команд, кульминацией которого стал файл DataAudit.txt.Это прекрасно работает ... если файл, с которым я работаю, называется file.csv.

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

Сценарий с именем audit.sh находится в папке с именем PurgatoryCSV, и идея заключается в том, чтобы я поместил туда файл, запустил сценарий и переместил файл на следующий шаг в моем рабочем процессе.

Я был бы благодарен за любую помощь, которую я мог бы получить с этим контрольно-пропускным пунктом.

Вот сценарий:

#!/bin/bash

echo -n "DATA AUDIT

------------
COLUMN NAMES
------------

" > DataAudit.txt
csvcut -n file.csv >> DataAudit.txt
echo -n "

---------------------------------------
FIRST TEN ROWS OF FIRST FIVE COLUMNS 
---------------------------------------

" >> DataAudit.txt
csvcut -c 1,2,3,4,5 file.csv | head -n 10 >> DataAudit.txt
echo -n "

------------
COLUMN STATS
------------

" >> DataAudit.txt
csvcut file.csv | csvstat >> DataAudit.txt
echo -n "

---END AUDIT" >> DataAudit.txt

Ответы [ 3 ]

2 голосов
/ 29 октября 2011

Несмотря на то, что это не является частью вопроса, приведенный здесь документ в этих обстоятельствах обеспечивает элегантную и более четкую реализацию вышеприведенного сценария, удаляя повторяющиеся ошибки:

#!/bin/bash

usage () { echo "${0##*/} inputfile outputfile"; exit 1; }

(($#==2)) || usage

INPUTFILE="$1"
OUTPUTFILE="$2"

cat <<EOF >$OUTPUTFILE # all that follows upto 'EOF' will go to the outputfile
DATA AUDIT

------------
COLUMN NAMES
------------

$(csvcut -n $INPUTFILE)

---------------------------------------
FIRST TEN ROWS OF FIRST FIVE COLUMNS 
---------------------------------------

$(csvcut -c 1,2,3,4,5 $INPUTFILE | head -n 10)

------------
COLUMN STATS
------------

$(csvcut $INPUTFILE | csvstat )

---END AUDIT
EOF
2 голосов
/ 28 октября 2011

Вы можете использовать переменные, которые передаются из командной строки: $1 для первой, $2 для второй и т. Д. Похоже, у вас есть две переменные, file.csv и DataAudit.txt

Если вы замените file.csv на $1 и DataAudit.txt на $2, теперь вы можете выполнить свой скрипт, выполнив:

./audit.sh myotherfile.csv MyOtherAudit.txt

В качестве альтернативы для большей читабельности обычно назначают их в именованные переменные вверху вашего скрипта:

INPUTFILE=$1
OUTPUTFILE=$2

Затем в вашем коде вы можете ссылаться на них с помощью $INPUTFILE и $OUTPUTFILE

1 голос
/ 28 октября 2011

как то так

#!/bin/bash

if [ $# -ne 2 ]
then
  echo "Usage: `basename $0` {inputFile} {outputFile}"
  exit 1
fi

InputFile="$1"
OutputFile="$2"

echo -n "DATA AUDIT

------------
COLUMN NAMES
------------

" > "$OutputFile"
csvcut -n "$InputFile" >> "$OutputFile"
echo -n "

---------------------------------------
FIRST TEN ROWS OF FIRST FIVE COLUMNS 
---------------------------------------

" >> "$OutputFile"
csvcut -c 1,2,3,4,5 "$InputFile" | head -n 10 >> "$OutputFile"
echo -n "

------------
COLUMN STATS
------------

" >> "$OutputFile"
csvcut "$InputFile" | csvstat >> "$OutputFile"
echo -n "

---END AUDIT" >> "$OutputFile"

Назовите сценарий как

audit.sh InputFile OutputFile

т.е.

audit.sh file.csv DataAudit.txt

Вам нужно будет сделать больше проверок передаваемых имен файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...