Вывести значения в столбце A и его количество в Excel - PullRequest
0 голосов
/ 12 июня 2018

У меня есть пакетный скрипт, который объединяет несколько данных текстового файла в файл CSV.Это работает нормально, и я также могу добавить заголовок.

@echo off
setlocal enabledelayedexpansion

(for %%x in (ClientLog*.txt) do more "%%x") >Copy.csv

echo NAME, DATE, TIME > NEW1.csv
type Copy.csv >> NEW1.csv

текущий вывод: enter image description here

Я пробовал несколько вариантов, чтобы получить всеИМЯ (Столбец А) и получите его счет и поместите его в новый файл CSV.Но я не могу найти правильный способ сделать это с помощью пакета.Возможно ли использовать пакетный сценарий?

Ожидаемый вывод:

ИМЯ СЧЕТЧИКА

Пользователь1 10

Пользователь2 1

Пользователь3 3

Пользователь5 3

Пользователь4 2

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Помимо того факта, что объединение файлов совершенно бесполезно для этого вопроса вообще, потому что оно работает в любом случае (хотя и довольно неуклюже) и совсем не связано с фактически проблемной частью подсчета, я хочу краткопокажу вам, как я могу выполнить объединение с командным файлом:

> "combined.csv" echo NAME,DATE,TIME
copy "combined.csv" + "ClientLog*.txt" "combined.csv" /B

Теперь давайте определим отдельные значения NAME и сохраним их в indnames.csv:

rem // Use `NAME` values as variable names as there as no duplicates possible:
for /F "usebackq skip=1 tokens=1* delims=," %%I in ("combined.csv") do (
    set "$%%I=%%J"
)
rem // Store the found individual variable names in a file:
> "indnames.csv" (
    for /F "tokens=1* delims=$=" %%I in ('set $') do @(
        echo/%%I
    )
)

Наконецдавайте посчитаем количество вхождений каждого значения NAME в исходном объединенном файле и сохраним результат в countind.csv:

> "countind.csv" (
    echo NAME,COUNT
    for /F "usebackq delims=" %%I in ("indnames.csv") do @(
        < nul set /P ="%%I,"
        < "combined.csv" find /C "%%I,"
    )
)

Все это работает, только если:

  • значения NAME не пусты и не начинаются с пробелов;
  • значения NAME не содержат $, = или , и не начинаются с; или ?;
  • значение NAME, за которым следует запятая , встречается один раз в строке;
  • никакой переменной, имя которой начинается со знака $, не существует вначало;
0 голосов
/ 12 июня 2018

Я предлагаю использовать PowerShell для этого, возможно, упакованный в пакет.

С PowerShell это просто, как

gc .\ClientLog*.txt|convertFrom-csv -Header Name,Date,Time|Group Name|Select Name,Count|Export-Csv New.csv -NoTypeInformation

Чтобы использовать эту строку сценария в командном файле:

powershell -NoP -C "gc .\ClientLog*.txt|convertFrom-csv -Header Name,Date,Time|Group Name|Select Name,Count|Export-Csv New.csv -NoTypeInformation"

В PowerShell как сценарий без псевдонимов, но оченьте же команды.

Get-Content .\ClientLog*.txt | ConvertFrom-Csv -Header Name,Date,Time|
    Group-Object Name | Select-Object Name,Count | 
        Export-Csv New.csv -NoTypeInformation

Некоторые промежуточные результаты для демонстрации:

PS> gc .\ClientLog1.txt
User1,1/4/2018,20:00

PS> gc .\ClientLog2.txt
USer2,1/4/2018,22:00

PS> gc .\ClientLog*.txt
User1,1/4/2018,20:00
USer2,1/4/2018,22:00

PS> gc .\ClientLog*.txt|ConvertFrom-Csv -Header Name,Date,Time

Name  Date     Time
----  ----     ----
User1 1/4/2018 20:00
USer2 1/4/2018 22:00

PS> gc .\ClientLog*.txt|ConvertFrom-Csv -Header Name,Date,Time|group name

Count Name  Group
----- ----  -----
    1 User1 {@{Name=User1; Date=1/4/2018; Time=20:00}}
    1 USer2 {@{Name=USer2; Date=1/4/2018; Time=22:00}}

PS> gc .\ClientLog*.txt|ConvertFrom-Csv -Header Name,Date,Time|group name|Select name,count

Name  Count
----  -----
User1     1
USer2     1

PS> gc .\ClientLog*.txt|ConvertFrom-Csv -Header Name,Date,Time|group name|Select name,count|Export-csv new.csv -Notype

PS> gc new.csv
"Name","Count"
"User1","1"
"USer2","1"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...