내 폴더에는 aca1.csv, aca2.csv, aca3.csv, team1.csv, team2.csv 및 team3.csv라는 6개의 .csv 파일이 있습니다. 각 파일에는 80,90,60,70,80 및 90줄이 있습니다. 파일과 해당 유형을 결합하거나 병합할 bash 스크립트 파일이 필요합니다. 예를 들어 aca1,aca2,aca3은 aca 유형입니다. 행 값을 계산합니다(단지 행 수를 계산하고 싶기 때문에 병합된 새 파일을 만들지 않고). 파일의 개수와 유형을 다른 .csv 파일에 씁니다. 아는 사람이 있으면 도와주세요?
답변1
<pattern><number>.<extension>
abc1.csv, abc02.csv, abc123.csv라는 파일 에 대해 작동하는 다음 bash 스크립트를 사용해보십시오 . 선택적으로 입력 디렉터리(기본값: .)를 첫 번째 명령줄 인수로 제공하고 파일 확장자(기본값: csv)를 두 번째 인수로 제공할 수 있습니다. 물론 $2를 지정하려면 $1을 강제로 지정해야 합니다.
$ cat ./countlinesbyfilecategory.sh
#!/bin/bash
ptrns=$(for fnm in `find ${1:-.} -regex ".*[0-9][0-9]*\.${2:-csv}"`; do echo $fnm | sed "s/[0-9][0-9]*\.${2:-csv}$//" ; done| sort -u)
for ptrn in $ptrns; do
echo -n $(basename $ptrn) " "
find ${1:-.} -regex "${ptrn}[0-9][0-9]*\.${2:-csv}" | xargs wc -l | tail -1 | awk '{print $1}'
done
$
답변2
행 수만 계산하려고 하므로 wc
awk
및 while을 사용하여 다음을 확인하고 다양한 패턴을 반복할 수 있습니다 .loop
n=0
while read i
do
((n=n+$i))
done <<(wc -l aca* | awk '{print $1}')
echo $n;
wc -l aca* | awk '{print $1}'
패턴에 대한 파일당 줄 수를 알려줍니다.
while
위의 출력을 읽으면 0 값을 얻고 n
총 라인 수를 인쇄하는 마지막 출력을 재귀적으로 추가합니다.wc
유형과 행을 기록하려면 스크립트를 작성하고 측정하려는 패턴을 입력으로 사용할 수 있습니다.echo "$pattern $n" >> output.txt
user@server[/apps/home/user/]> cat script.sh
#!/bin/bash
for p in "aca*" "*sh"
do
n=0;
while read i;
do ((n=n+$i));
done < <(wc -l $p | awk '{print $1}'); echo "$p" $n;
done
user@server[/apps/home/user/]> bash script.sh
aca* 46
*sh 432
답변3
하나 또는 별도의 csv 파일에 모든 유형의 행 개수를 원하는지 여부는 명확하지 않습니다.
두 개의 다른 csv 파일이 필요한 경우 다음을 사용하십시오.
sh-4.3$ for i in aca team
do
i_ct=`awk -v pat=$i -F ',' 'BEGIN{c=0} FILENAME ~ pat {c += NF}END{print c}' *.csv`
echo "$i,${i_ct}" > ${i}_count.csv
done
하나의 파일에 "test"와 "aca"의 종류와 줄 수를 모두 입력해야 하는 경우
sh-4.3$ for i in aca team
do
i_ct=`awk -v pat=$i -F ',' 'BEGIN{c=0} FILENAME ~ pat {c += NF}END{print c}' *.csv`
echo "$i,${i_ct}"
done > All_ftype_count.csv
파일 형식이 많은 경우 .txt 에서 팀 뒤에 추가할 수 있습니다 for i in
. 피드백을 공유해주세요.