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