매개변수를 읽고 스크립트에 사용할 임시 파일을 생성합니다.

매개변수를 읽고 스크립트에 사용할 임시 파일을 생성합니다.

파일의 열 수를 계산하는 스크립트를 작성하려고 합니다. 그런데 파일명이 뭔지 모르겠네요. 매개변수의 정보가 포함된 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

관련 정보