У меня есть поле в текстовом файле, экспортируемом из базы данных. Поле содержит адреса, но иногда они довольно длинные, и база данных позволяет им содержать несколько строк. При экспорте символ новой строки заменяется знаком доллара, например:
first part of very long address$second part of very long address$third part of very long address
Не каждый адрес имеет несколько строк, и ни один адрес не содержит более трех строк. Длина каждой строки является переменной.
Я собираю данные для импорта в MS Access, который используется для mailmerge. Я хочу разделить поле на знаке $, если оно есть, но если поле содержит только 1 строку, я хочу установить в моих двух дополнительных выходных полях строку нулевой длины, чтобы в адресе не было пустых строк когда это будет напечатано.
У меня есть файл awk, который корректно работает со всеми другими данными в текстовом файле, но мне нужно, чтобы этот последний бит работал. Я попробовал приведенный ниже код. Помимо того, что я получаю синтаксическую ошибку, я не уверен, что это хороший способ сделать то, что я хочу. Это делается с помощью gawk в Windows.
BEGIN { FS = "|" }
$1 != "HEADER" {
if ($6 ~ /\$/)
split($6, arr, "$")
address = arr[1]
addresstwo = arr[2]
addressthree = arr[3]
addressLength = length(address)
addressTwoLength = length(addresstwo)
addressThreeLength = length(addressthree)
else {
address = $6
addressLength = length($6)
addresstwo = ""
addressTwoLength = length(addresstwo)
addressthree = ""
addressThreeLength = length(addressthree)
}
printf("%*s\t%*s\t\%*s\n",
addressLength, address, addressTwoLength, addresstwo, addressThreeLength, addressthree)
}
EDIT:
Извини за это. Вот образец
HEADER|0000000130|0000527350|0000171250|0000058000|0000756600|0000814753|0000819455|100106
rec1|ILL/COLORADO COLLEGE$TUTT LIBRARY|1021 N CASCADE$COLORADO SPRINGS, CO 80903|
rec2|ILL /PIKES PEAK LIBRARY DISTRICT|20 N. CASCADE AVE. / PO BOX 1579$COLORADO SPRINGS, CO 80903|
rec3|DOE,JOHN|PO Box 8034|
rec4|ILL/GEORGIA INSTITUTE OF TECHNOLOGY|INFORMATION DELIVERY DEPT$704 CHERRY ST$ATLANTA, GA 30332-0900
Я сопоставляю только строки без заголовка в них. Мне нужно разбить текстовые строки на знаки $. Строка между каналами не должна быть дополнена (именно поэтому я пытался получить длину в моем исходном коде). Для этого примера есть 6 выходных полей, и любое поле, для которого нет данных, является просто пустой строкой (также то, что я пытался сделать в коде).
rec1|ILL/COLORADO COLLEGE|TUTT LIBRARY|1021 N CASCADE|COLORADO SPRINGS, CO 80903||
rec2|ILL /PIKES PEAK LIBRARY DISTRICT||20 N. CASCADE AVE. / PO BOX 1579|COLORADO SPRINGS, CO 80903||
rec3|DOE,JOHN||PO Box 8034|||
rec4|ILL/GEORGIA INSTITUTE OF TECHNOLOGY||INFORMATION DELIVERY DEPT|704 CHERRY ST|ATLANTA, GA 30332-0900|
Надеюсь, это поможет! Дайте мне знать, если это все еще не ясно.