Last active
September 13, 2024 04:25
-
-
Save pgagnidze/04ecb2c38934058cdb5fbeba2e6a5e43 to your computer and use it in GitHub Desktop.
accounts.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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" |
ძალიან უცნაურად ატვირთა სკრიპტი მე მაპატიე :)
მოკლედ, ეს ნაწილი "EOF დაამატა ,,,,@abc.com, - და მაგასაც გამოვასწორებ!" ჩემი ბრალი იყო რადგან ზედმეტი ლაინი მქონდა ჩაგდებული მოცემულ .csv ფაილში და მალევე გამოსწორდა, რაც შეეხება დავალებას, ვაკმაყოფილებ მაგრამ გამოცდას მაინც ჩაგდებულად მიწერს, ამიტომ უკვე მეილს მივწერ რატომ აკეთებს მასე, მოცემულ პირობაშ ყველა მეილი უნდა დააფდეითდეს და არა ცალკეული, ამიტომ გავარკვევ ზუსტად რა უნდათ. მოკლედ დიდი მადლობა! :) უძლიერესი სამსახური გამიწიე!
ეხლა მშვიდად დამეძინება
როგორც მახსოვს location_id-ის დამატება მოთხოვნაში ეწერა და მაგიტომ ვქენი მასე. მარა შეგიძლია შეცვალო თუ არ გჭირდება.
ზოგადად დავალების აღწერა ცუდად ეწერა, გამიჭირდა დეტალების გააზრება.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
#!/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
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
}
NR == 1 {next} # Skip header row
{
id = $1
location_id = $2
name = format_name($3)
title = $4
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"