Как часть моей домашней работы, мне нужно взять строку, содержащую адресную информацию из текстового файла.
Как это.
2 GO MOBILITY / CALEX EXPRESS^58 PITTSTON AVENUE^^PITTSTON^PA^18640^570-603-1042
Затем отформатировать файл, чтобы он выглядел следующим образом.
Company Name: 2 GO MOBILITY / CALEX EXPRESS
Company Phone Number: 570-603-1042
Company Address: 58 PITTSTON AVENUE, PITTSTON, PA, 18640
\n (blank line)
Затем добавьте адрес в файл с именем PA_595.txt
в каталоге ./basefolder/PA
.
Если в списке указано другое состояние, информация должна появиться в файле в соответствующем файле. папки.
Мне нужно использовать AWK и SED для этого.
awk -v FS=^ '{print $1,$2,$3,$4,$5,$6,$7}' "./data/595.txt" | sed i\ " Company Name: $1 \n Company Address: $2,$3,$4,$5 \n Company Phone Number: $6" | tee "./$2/$5/${5}_595.txt"
Я получаю
PERFORMANCE MOBILITY 1640 WEST 7th AVE EUGENE OR 97402 541-393-8474
Company Name:
Company Addess: ,,,
Company Phone Number:
Мне нужно
Company Name:PERFORMANCE MOBILITY
Company Phone Number:541-393-8474
Company Address: 1640 WEST 7th AVE, EUGENE, OR, 97402
Часть кода на awk работает. Я почти уверен, что проблема в том, что sed не видит названия полей из awk.
Я добился прогресса с прошлой ночи. Я изменил свой код на.
file_name=$1
i=0
while IFS=^ read company_name address1 address2 city state zip phone
do
((i++))
echo "./$2/$state/${state}_595.txt"
sed -e "i\ Company Name:$company_name \n Company Phone Number:$phone \n Company Addess: $address1, $city, $state, $zip \n " | tee "./$2/$state/${state}_595.txt"
done < $file_name
Проблема в том, что он показывает каждый адрес, как он показывает в текстовом файле. Но тогда он показывает это должным образом.
> ЭФФЕКТИВНОСТЬ МОБИЛЬНОСТИ ^ 1640 ЗАПАД 7-й АВЕ ^^ EUGENE ^ ИЛИ ^ 97402 ^ 541-393-8474 Название компании: 2 GO MOBILITY / CALEX EXPRESS Телефон компании Номер: 570-603-1042 Адрес компании: 58 PITTSTON AVENUE, PITTSTON, PA, 18640
Однако форматирование неверно в текстовом файле и все адреса go в одном и том же текстовом файле.
Название компании: 2 GO MOBILITY / CALEX EXPRESS Номер телефона компании: 570-603-1042
Адрес компании: 58 PITTSTON AVENUE, PITTSTON, PA, 18640
A & J MOBILITY ^ 3058 HELSAN DR ^^ RICHFIELD ^ WI ^ 53716 ^ 262-623-6236 Название компании: 2 GO MOBILITY / CALEX EXPRESS Номер телефона компании: 570-603-1042
Фирма Аддесс: 58 PITTSTON AVENUE, PITTSTON, PA, 18640
A to Z МОБИЛЬНОСТЬ И МЕДИЦИНСКОЕ ОБОРУДОВАНИЕ, В C. ^ PO BOX 99 ^^ SOMONAUK ^ IL ^ 60552 ^ 815-495 -3423 Название компании: 2 GO MOBILITY / CALEX EXPRESS Номер телефона компании: 570-603-1042
Я не уверен, почему.
L Аст-ответ получил меня почти до конца. Я только что увидел одну ошибку.
> tee: /CA_595.txt: В доступе отказано
Я проверил разрешения для папки и файла, и все они 775.
Я использую эту команду при создании файла .txt
cstates=($(awk -v FS=^ '{print $5}' "$1"))
for i in "${cstates[@]}"
do
:
if [[ ! -f "./$2/$i/${i}_595.txt" ]]; then
echo "Making ${i}_595.txt File"
touch "./$2/$i/${i}_595.txt"
chmod a+x "./$2/$i/${i}_595.txt"
else echo "File ${i}_595.txt already exists"
fi
done
Или, если я просто использую эту команду.
file_name="$1"
while IFS=^ read -r company_name address1 address2 city state zip phone
do
# sed " a\ Company Name:$company_name \n Company Phone Number:$phone \n Company Addess: $address1, $city, $state, $zip \n " | tee -a "./$2/$state/${state}_595.txt"
printf "Company Name: %s\nCompany Address: %s%s, %s, %s, %s\nCompany Phone Number: %s\n\n" \
"${company_name}" "${address1}" "${address2}" "${city}" "${state}" "${zip}" "${phone}" | tee -a "${outputdir}/${state}_595.txt" > /dev/null
done < $file_name
Разрешение для файла и папки выглядит нормально, и оно показывает я как владелец файлов и папок.