修改BASH脚本以处理我告诉它的任何文件

时间:2011-10-28 19:40:58

标签: bash shell unix

我编写了一个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 个答案:

答案 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

您必须对传递的文件名进行更多验证。