Как объединить похожие файлы .csv в один и подсчитать строки (без создания нового файла) [закрыто]

-1
17.07.2017, 08:23
3 ответа

Попробуйте приведенный ниже сценарий bash, который работает с файлами с именами <pattern><number>.<extension>, такими как abc1.csv, abc02.csv, abc123.csv. При желании вы можете указать входной каталог (по умолчанию :. )в качестве первого аргумента командной строки и расширение файла (default :csv )в качестве второго; конечно, вам придется обязательно указать $1, если вы хотите указать $2.

$ 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

$
0
28.01.2020, 05:12

Вы можете проверить следующее, которое используетwcawkи время 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
0
28.01.2020, 05:12

Неясно, нужно ли вам количество строк всех типов в одном или в отдельных 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

Если типов файлов больше, вы можете добавить их после команды в for i in. Поделитесь своим отзывом.

0
28.01.2020, 05:12

Теги

Похожие вопросы