同様の種類の.csvファイルを1つにまとめ、新しいファイルを作成せずに行数を計算する方法[閉じる]

同様の種類の.csvファイルを1つにまとめ、新しいファイルを作成せずに行数を計算する方法[閉じる]

私のフォルダには、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番目の引数として指定できます。もちろん、$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 awkwhileを使用して次のことを確認し、さまざまなパターンを繰り返すことができます。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上記の出力を読み取ると、ゼロ値が得られ、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

1つまたは別のcsvファイルに任意の種類の行数が必要かどうかは不明です。

2つの異なる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 

1つのファイルに「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。フィードバックを共有してください。

関連情報