Да, на самом деле это два разных вопроса: 1. Можно ли использовать столбец varchar в качестве столбца автоматического приращения с уникальными значениями, такими как числа рулонов в классе
ANS: Да, вы можете получить это правильно используя ниже фрагмент кода без указания значения ID и P_ID,
CREATE TABLE dbo.TestDemo
(ID INT IDENTITY(786,1) NOT NULL PRIMARY KEY CLUSTERED,
P_ID AS 'LFQ' + RIGHT('00000' + CAST(ID AS VARCHAR(5)), 5) PERSISTED,
Name varchar(50),
PhoneNumber varchar(50)
)
ANS: Нет, вы не можете использовать это в одной таблице.
Это лучше сделать в awk
:
awk -F, -v dgn='Engineer' '$2 == dgn{s += $3; ++c} END{printf "%.2f\n", s/c}' file.csv
35125.00
Не могли бы вы попробовать выполнить следующее (поскольку OP запрашивает путь сценария, поэтому добавьте его способом сценария, в котором передается 1-й аргумент в качестве имени Input_file и 2-й аргумент в виде строки, для которой требуется avg).
cat script.ksh
file="$1"
name="$2"
awk -F, -v field="$name" '{a[$2]+=$3;b[$2]++} END{for(i in a){if(i == field){print a[i]/b[i]}}}' "$file"
Теперь запустите скрипт следующим образом.
./script.ksh Input_file Analyst
50000
Если вы хотите сделать это в оболочке:
#!/bin/bash
file=$1
designation=$2
# code to validate user input here ...
sum=0
count=0
while IFS=, read -r n d s; do
if [[ ${designation,,} == "${d,,}" ]]; then
(( sum += s ))
(( count++ ))
fi
done < "$file"
if (( count == 0 )); then
echo "No $designation found in $file"
else
echo $((sum / count))
fi
GNU datamash - полезный инструмент для расчета такого рода вещей:
$ datamash -sHt, groupby 2 mean 3 < employees.txt
Объедините с grep
, чтобы ограничить его только названием, которое вас интересует. [ 114]
Использование Perl
perl -F, -lane ' if(/Engineer/) { $dsg+=$F[2];$c++ } END { print $dsg/$c } ' file
с заданными вами входами
$ cat john.txt
Name,Designation,Salary
Hari,Engineer,35000
Suresh,Consultant,80000
Umesh,Engineer,45500
Maya,Analyst,50000
Guru,Consultant,100000
Sushma,Engineer,30000
Mohan,Engineer,30000
$ perl -F, -lane ' if(/Engineer/) { $dsg+=$F[2];$c++ } END { print $dsg/$c } ' john.txt
35125
$