我有一个包含多行代码的文件,其中一些代码包含匹配的客户代码。假设我们有客户ABC,DEF和GHI。每个客户都有几条匹配的行,所以文件就像:
ABC1
ABC2
DEF1
DEF2
DEF3
GHI1
GHI2
GHI3
GHI4
我想要一个批处理脚本,它将运行并返回客户对每个文件的计数。所以上面文件的输出将是
ABC = 2 files
DEF = 3 files
GHI = 4 files
有关于此的任何想法吗?
由于
答案 0 :(得分:3)
@echo off
setlocal EnableDelayedExpansion
for /F %%a in (file.txt) do (
set line=%%a
set /A lines[!line:~0,3!]+=1
)
for /F "tokens=2,3 delims=[]=" %%a in ('set lines[') do echo %%a = %%b files
答案 1 :(得分:0)
使用grep进行Bash可以轻松完成此操作。像这样的东西。
#!/usr/bin/env bash
ABC=$(grep -c "ABC" FILE)
DEF=$(grep -c "DEF" FILE)
echo "ABC = "$ABC" files"
答案 2 :(得分:0)
@echo off
setlocal enableDelayedExpansion
set cust_file=.\cusomers.txt
for /f "useback" %%# in ("%cust_file%") do (
set "line=%%~#"
set cust_id=!line:~0,3!
if not defined cust_c_!cust_id! (
set /a cust_c_!cust_id!=1
) else (
set /a cust_c_!cust_id!=cust_c_!cust_id!+1
)
)
rem set cust_c_
for /f "tokens=3,4 delims=_=" %%c in ('set cust_c_') do (
echo %%c = %%d
)
答案 3 :(得分:0)
我猜你是在Windows上,但万一你也有适当的操作系统; - )
cut -c1-3 YourFile | sort |uniq | while read cust; do n=$(grep -c $cust file);echo $cust:$n; done
那说......提取每行的前3个字符,对它们进行排序并删除重复项(使用uniq
)。在循环中一次读取一个客户ID,并要求grep
计算文件中每个客户ID的出现次数。
或者,如果您有awk
awk '{id=substr($0,1,3);counts[id]++} END{for(x in counts)print x,counts[x]}' YourFile
这就是说......取每行的前3个字母并保存在变量id
中。增加counts[]
数组,元素id
。在输入文件的末尾,通过counts[]
数组,并为每个元素打印其索引以及看到它的次数。