2016-10-14 5 views
0

У меня есть куча файлов в формате WMA (.csv). Первое поле является целым числом или может быть пустым. Это верно для всех файлов. Я хочу подсчитать количество записей, чье первое поле пусто в каждом файле, а затем нужно построить граф граф по всем файлам.awk на нескольких файлах и выводах по трубопроводам каждого из них запускается в команду wc отдельно

Формат файла filename.csv:

123456,few,other,fields 
,few,other,fields 
234567,few,other,fields 

Я хочу что-то вроде

awk -F, '$1==""' `ls` | (for each file separately wc -l) | gnugraph (y axis as output of wc -l command and x axis as simply 1 to n where n is number of csv files) 

Проблема Я облицовкой wc -l получает выполняется только один раз для всех файлов вместе. Я хочу запустить wc -l для каждого файла и подсчитать количество записей, имеющих пустое первое поле, и предоставить эту последовательность отсчетов команде gnugraph. раз я получаю требуется подсчет для каждого файла я почти сделано как

seq 10 | gnuplot -p -e "plot '<cat'" 

работает отлично

ответ

1

Вы можете использовать awk следить за подсчетом для каждого файла в массив. Затем в конце выводит содержимое массива:

awk '$1==""{a[FILENAME]+=1} END{for(file in a) { print file, a[file] }}' `ls` 

Таким образом, вы не должны связываться с wc и просто стрелять содержимое прямо к gnuplot

примеру в использовании:

$> cat file1 
,test 
2,test 
3, 
$> cat file2 
,test 
2,test 
3, 
,test 
$> awk -F"," '$1==""{a[FILENAME]+=1} END{for(file in a) { print file, a[file] }}' `ls` 
file1 1 
file2 2 
+0

Да, именно это я и пожелал! спасибо :) –

0

Если вы хотите запустить wc -l отдельно для каждого файла, вы должны установить петлю.

Что-то вдоль линий зача-

for i in `ls` 
do 
    awk -F, '$1==""' "$i" | wc -l 
done | gnugraph 
+0

Я думал хранение выходных данных в массиве и туалета на каждом из элемент массива. Можете ли вы мне помочь в этом? –

+0

Другое дело, что gnugraph должен запускаться только один раз для всех вместе с выходом wc. поэтому этот конкретный скрипт не будет работать так, как есть. –

+0

@HrishikeshGoyal, проверьте изменения. Размещение gnugraph должно разобрать ваш второй комментарий. – VM17

0

Для первого поля, есть более простой способ с grep

$ grep -c '^,' file{1..3} 

file1:1 
file2:2 
file3:4 

я скопировал файл в ФАЙЛ1 и удвоился в file2 и file3 соответственно

+0

Это хороший! – JNevill

1

С простаком вы можете использовать BEGINFILE и ENDFILE:

$ awk -F, '$1==""{++i} BEGINFILE{i=0} ENDFILE{print FILENAME, i}' file1 file2 
file1 3 
file2 1 

 Смежные вопросы

  • Нет связанных вопросов^_^