![매개변수를 읽고 스크립트에 사용할 임시 파일을 생성합니다.](https://linux55.com/image/152086/%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%9D%BD%EA%B3%A0%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%9E%84%EC%8B%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%83%9D%EC%84%B1%ED%95%A9%EB%8B%88%EB%8B%A4..png)
파일의 열 수를 계산하는 스크립트를 작성하려고 합니다. 그런데 파일명이 뭔지 모르겠네요. 매개변수의 정보가 포함된 tempfile이라는 파일을 만들려고 합니다.
다음은 "columnCounter"라는 스크립트에 대해 지금까지 작성한 스크립트입니다.
#!/bin/bash
read colNumber
count=0
for i in $colNumber
do
count=`expr $count + 1'
done
echo "column number: $count"
위의 코드는 정보가 포함된 파일 이름이 있고 이를 터미널에 다음 형식으로 입력하는 한 작동합니다: 열 카운터.
터미널의 매개변수에서 임시 파일을 생성하기 위해 다음 두 줄의 코드를 추가한 다음 임시 파일을 cat하고 이를 컬럼카운터에 파이프해 보았습니다. 그러나 이것은 작동하지 않습니다.
cat $1 > tempfile
cat tempfile | columnCounter
답변1
파일 이름을 스크립트에 매개변수로 제공하려면 사용해야 합니다.위치 매개변수
이 작업을 수행하려면 다음 스크립트를 사용할 수 있습니다.
#!/bin/bash
awk '{ print NF; exit }' "$1"
이는 첫 번째 행의 열 수에만 관심이 있다고 가정합니다.
열 수가 가장 많은 행을 찾으려면 다음을 수행할 수 있습니다.
#!/bin/bash
awk 'NF > max { max = NF } END { print max }' "$1"
파일의 모든 줄 길이를 확인하고 가장 긴 줄을 인쇄합니다.
이제 구분 기호를 지정하려면 여러 위치 인수를 사용할 수 있습니다.
#!/bin/bash
delim=$1
file=$2
awk -F "$delim" 'NF > max { max = NF } END { print max }' "$file"
이를 통해 다양한 파일(예: csv)의 최대 열 크기를 계산할 수 있습니다.
./columnCounter , tempfile.csv
더 멋지게 만들기 위해 구문 분석 매개변수를 사용할 수 있습니다 getopts
.
#!/bin/bash
while getopts d:f: opt; do
case $opt in
d) delim=$OPTARG;;
f) file=$OPTARG;;
esac
done
awk -F "$delim" 'NF > max { max = NF } END { print max }' "$file"
이는 다음과 같이 호출됩니다.
./columCounter -d , -f tempfile.csv