我编写了一个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
答案 0 :(得分:2)
您可以使用从命令行传入的变量:$1
代表第一个,$2
代表第二个等等。看起来你有两个变量,{{1} }和file.csv
如果您将DataAudit.txt
替换为file.csv
而将$1
替换为DataAudit.txt
,则可以执行以下操作来执行脚本:
$2
或者为了更具可读性,通常将它们分配到脚本顶部的命名变量中:
./audit.sh myotherfile.csv MyOtherAudit.txt
然后,在您的代码中,您可以使用INPUTFILE=$1
OUTPUTFILE=$2
和$INPUTFILE
答案 1 :(得分:2)
虽然这不是问题的一部分,但在这些情况下,here-document提供了上述脚本的优雅和清晰的实现,消除了容易出错的重复:
#!/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 :(得分:1)
像这样的东西
#!/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
您必须对传递的文件名进行更多验证。