私のフォルダには、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
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
上記の出力を読み取ると、ゼロ値が得られ、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
。フィードバックを共有してください。