-
-
Save pgagnidze/04ecb2c38934058cdb5fbeba2e6a5e43 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
if [ "$#" -ne 1 ]; then | |
echo "Usage: $0 path_to_accounts.csv" | |
exit 1 | |
fi | |
input_file="$1" | |
output_file="accounts_new.csv" | |
awk -F, ' | |
BEGIN { | |
OFS="," | |
FPAT="([^,]+)|(\"[^\"]+\")" | |
} | |
function format_name(name) { | |
gsub(/^"|"$/, "", name) | |
gsub(/^ +| +$/, "", name) | |
split(name, words, " ") | |
formatted = "" | |
for (i=1; i<=length(words); i++) { | |
word = words[i] | |
gsub(/^.|-./,toupper(substr(word,1,1)),word) | |
formatted = formatted (i>1?" ":"") word | |
} | |
return formatted | |
} | |
function generate_email(name, location_id) { | |
split(name, parts, " ") | |
first = tolower(substr(parts[1], 1, 1)) | |
last = tolower(parts[length(parts)]) | |
gsub(/-/, "", last) | |
return first last location_id "@abc.com" | |
} | |
NR == 1 {print; next} | |
{ | |
id = $1 | |
location_id = $2 | |
name = format_name($3) | |
title = $4 | |
email = "" | |
department = "" | |
for (i=5; i<=NF; i++) { | |
if ($i ~ /@/) { | |
email = $i | |
if (i < NF) department = $(i+1) | |
break | |
} else if (i == NF) { | |
department = $i | |
} else { | |
title = title "," $i | |
} | |
} | |
gsub(/^"|"$/, "", title) | |
gsub(/^"|"$/, "", email) | |
gsub(/^"|"$/, "", department) | |
if (email == "" || email !~ /@/ || email !~ /abc\.com$/) { | |
email = generate_email(name, location_id) | |
} | |
if (title ~ /,$/) { | |
gsub(/,$/, "", title) | |
} | |
if (title ~ /,/) { | |
title = "\"" title "\"" | |
} | |
gsub(/""+/, "\"", title) # Remove any duplicate quotes | |
print id, location_id, name, title, email, department | |
} | |
' "$input_file" > "$output_file" | |
echo "New CSV file created: $output_file" |
$ cat accounts_new.csv
id,location_id,name,title,email,department
1,1,Susan Houston,Director of Services,[email protected],
2,1,Christina Gonzalez,Director,[email protected],
3,2,Brenda Brown,"Director, Second Career Services",[email protected],
4,3,Howard Lader,"Manager, Senior Counseling",[email protected],
5,4,Kimberly Pesavento,Commercial director,[email protected],
6,5,Joe Bloom,Financial Empowerment Programs Program Director,[email protected],
7,6,Peter Olson,Director,[email protected],
8,6,Bart Charlow,Executive Director,[email protected],
9,7,Bart Charlow,Executive Director,[email protected],
10,7,Barbara Kalt,Director,[email protected],
11,8,Marilyn BakerBenturini,Director,[email protected],
12,8,Graciela Hernandez,Assistant Manager,[email protected],
13,8,Julie Avelino,Assessment Specialist,[email protected],
14,9,Dave Genesy,Library Director,[email protected],
15,9,Maria Kramer,Library Divisions Manager,[email protected],
16,10,Dave Genesy,Tester,[email protected],
17,10,Maria Kramer,Library Division Manager,[email protected],
18,11,Dave Genesy,Head of office,[email protected],
19,11,Elizabeth Meeks,Branch Manager,[email protected],
20,12,Kathy Endaya,Director,[email protected],
21,13,Dave Genesy,Library Director,[email protected],
22,14,Andres Espinoza,"Manager, Commanding Officer",[email protected],
23,15,Jack Phillips,Administrator,[email protected],
24,16,James Lee,Commanding Officer,[email protected],
25,17,Kenneth Gibson,Tester,[email protected],
26,18,Sharon Petersen,Administrator,[email protected],
27,19,Sharon Petersen,Administrator,[email protected],
28,21,Moncef Salah,Tester,[email protected],Office of Innovation
29,22,Suzanne Badenhoop,Tester,[email protected],Referrals
30,20,Sean Houston,Director of new Services,[email protected],
31,8,David Genesy,Account Manager,[email protected],
32,8,Elizabeth Feeney,CEO,[email protected],Operations
33,8,Erika Meeks,Tester,[email protected],Operations
,,,,@abc.com,
მოკლედ პაპუნა, ასეთი შედეგ ჯერ არ მიმიღია, შეიძლება ითქვას რომ იმუშავა, უბრალოდ აქ რაც არის შესაცვლელი:
- ყველა იმეილს location_id დაურთო - აი მაგას გამოვასწორებ;
- EOF დაამატა ,,,,@abc.com, - და მაგასაც გამოვასწორებ!
ვერ მოვითმინე და ავდექი საწოლიდან, რა ჩათრევა ცოდნია! :დ
#!/bin/bash
Check if an argument is provided for the input file
if [ "$#" -ne 1 ]; then
echo "Usage: $0 path/to/accounts.csv"
exit 1
fi
Input and output file paths
input_file="$1"
output_file="accounts_new.csv"
temp_file="temp_emails.txt"
Header for the new CSV file
echo "id,location_id,name,title,email,department" > "$output_file"
Clear the temporary file
"$temp_file"
Initialize an associative array to track generated emails
declare -A email_map
awk -F, '
BEGIN {
OFS="," # Output field separator
FPAT="([^,]+)|("[^\"]+")" # Field pattern to handle quoted fields
}
function format_name(name) {
gsub(/^"|"$/, "", name) # Remove leading/trailing quotes
gsub(/^ +| +$/, "", name) # Remove leading/trailing spaces
split(name, words, " ") # Split name into words
formatted = ""
for (i=1; i<=length(words); i++) {
word = words[i]
gsub(/^.|-./, toupper(substr(word,1,1)), word) # Capitalize first letter of word
formatted = formatted (i>1?" ":"") word # Join formatted words with spaces
}
return formatted
}
function generate_email(name, location_id) {
split(name, parts, " ")
first = tolower(substr(parts[1], 1, 1))
last = tolower(parts[length(parts)])
gsub(/-/, "", last) # Remove hyphens from last name
new_email = first last "@abc.com"
# If the email is already in use, add location_id
while (new_email in email_map) {
new_email = first last location_id "@abc.com"
location_id++
}
email_map[new_email] = 1
return new_email
}
NR == 1 {next} # Skip header row
{
id = $1
location_id = $2
name = format_name($3)
title = $4
email = ""
department = ""
for (i=5; i<=NF; i++) {
if ($i ~ /@/) {
email = $i
if (i < NF) department = $(i+1)
break
} else if (i == NF) {
department = $i
} else {
title = title "," $i
}
}
gsub(/^"|"$/, "", title) # Remove leading/trailing quotes from title
gsub(/^"|"$/, "", email) # Remove leading/trailing quotes from email
gsub(/^"|"$/, "", department) # Remove leading/trailing quotes from department
# Generate email based on existing email or add location_id if needed
if (email ~ /@abc\.com$/) {
email = generate_email(name, location_id)
} else {
email = generate_email(name, location_id)
}
if (title ~ /,$/) {
gsub(/,$/, "", title) # Remove trailing comma from title
}
if (title ~ /,/) {
title = "\"" title "\"" # Enclose title with quotes if it contains commas
}
gsub(/""+/, "\"", title) # Remove duplicate quotes from title
print id, location_id, name, title, email, department
}
' "$input_file" > "$temp_file"
Append the processed data to the output file
cat "$temp_file" >> "$output_file"
Clean up temporary files
rm "$temp_file"
echo "New CSV file created: $output_file"
ძალიან უცნაურად ატვირთა სკრიპტი მე მაპატიე :)
მოკლედ, ეს ნაწილი "EOF დაამატა ,,,,@abc.com, - და მაგასაც გამოვასწორებ!" ჩემი ბრალი იყო რადგან ზედმეტი ლაინი მქონდა ჩაგდებული მოცემულ .csv ფაილში და მალევე გამოსწორდა, რაც შეეხება დავალებას, ვაკმაყოფილებ მაგრამ გამოცდას მაინც ჩაგდებულად მიწერს, ამიტომ უკვე მეილს მივწერ რატომ აკეთებს მასე, მოცემულ პირობაშ ყველა მეილი უნდა დააფდეითდეს და არა ცალკეული, ამიტომ გავარკვევ ზუსტად რა უნდათ. მოკლედ დიდი მადლობა! :) უძლიერესი სამსახური გამიწიე!
ეხლა მშვიდად დამეძინება
როგორც მახსოვს location_id-ის დამატება მოთხოვნაში ეწერა და მაგიტომ ვქენი მასე. მარა შეგიძლია შეცვალო თუ არ გჭირდება.
ზოგადად დავალების აღწერა ცუდად ეწერა, გამიჭირდა დეტალების გააზრება.
აბა ნახე ახლა, განვაახლე ვერსია.