UNIX средняя по конкретному сотруднику по назначению

Да, на самом деле это два разных вопроса: 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)
  )
  1. Два разных приращения в одном столбце,

ANS: Нет, вы не можете использовать это в одной таблице.

1
задан RavinderSingh13 6 March 2019 в 16:47
поделиться

5 ответов

Это лучше сделать в awk:

awk -F, -v dgn='Engineer' '$2 == dgn{s += $3; ++c} END{printf "%.2f\n", s/c}' file.csv

35125.00
0
ответ дан anubhava 6 March 2019 в 16:47
поделиться

Не могли бы вы попробовать выполнить следующее (поскольку 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
0
ответ дан RavinderSingh13 6 March 2019 в 16:47
поделиться

Если вы хотите сделать это в оболочке:

#!/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
0
ответ дан glenn jackman 6 March 2019 в 16:47
поделиться

GNU datamash - полезный инструмент для расчета такого рода вещей:

$ datamash -sHt, groupby 2 mean 3 < employees.txt

Объедините с grep, чтобы ограничить его только названием, которое вас интересует. [ 114]

0
ответ дан Shawn 6 March 2019 в 16:47
поделиться

Использование 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

$
0
ответ дан stack0114106 6 March 2019 в 16:47
поделиться