Вау. С чего начать?
folderday
, foldermonth
и назначения `date…`
;
просто создайте outputdirday
с постоянными значениями. outdir
равно outputdirday
,
, но outputdir
отличается. datetime
, logdatetime
и outputdir
,
, которые даже не используются в скрипте. awk
, которые идентичны
, за исключением тривиальной разницы.
Один из них работает, а один не работает?
Они терпят неудачу по-разному?
Я так не думаю.
Тогда не показывай их обоих. ~ / sboper / StandAlone / input / $ foldermonth / GLMS_Daily / $ folderday / Customer_Create_Records.dat
) {{1 }} если вам действительно действительно не нужно. … / input /…
. Standalone
, а второй - StandAlone
-
в вашем ~ / sboper
] каталог? выходной день
.Когда я запускаю ваш скрипт и выполняю echo "$ outputdirday"
перед awk
, я получаю
~ / sboper / StandAlone / input / June_2016 / GLMS_Daily / 08Т.е., поскольку
~
был в кавычках,
он не был расширен до моего домашнего каталога.
Мне пришлось изменить назначение на
outputdirday = "$ HOME / sboper / StandAlone / input / $ foldermonth / GLMS_Daily / $ folderday"{{ 1}} , чтобы заставить его работать.
outdir
.
Вы говорите, что он настроен неправильно, но вы пытались его распечатать?
Когда я это делаю, я получаю то же значение, что и для outputdirday
. имя файла
.
Это , где (частично) проблема; см. ниже. awk
).
Это, вероятно, не действительно важно,
но вы даже не говорите, в какой операционной системе вы работаете. awk
скрипте
на более короткие строки, вы могли понять, что он эквивалентен
{ if ($ 12 == "A") filename = "outdir / Customer_Create_Records.dat " print >> filename close (filename) }Как указал Майкл Верс в его ответ , это устанавливает
filename
условно ,
и затем записывает каждую входную строку в filename
безоговорочно .
Как он предлагает, вам нужно сделать что-то вроде
{ if ($ 12 == "A ") { filename =" outdir / Customer_Create_Records.dat " print >> filename close (filename) } }
filename
после его установки,
вы бы увидели, что это было
{{1} } outdir / Customer_Create_Records.dat, потому что
"outdir"
(в кавычках)
означает строку o
u
t
d
i
r
,
а не ] значение переменной outdir
.
Вам нужно сделать {{ 1}}
filename = outdir "/Customer_Create_Records.dat"
"$ outputdirday"
, "$ inputdir"
и "$ sourcefile"
)
, если у вас нет веской причины не делать этого, {{1} } и вы уверены, что знаете, что делаете.
Это не похоже на причину данной проблемы,
, но в конечном итоге это доставит вам неприятности. `…`
на $ (…)
-
см. this , это и это . дата +% Y% m% d
и дата +% B_% Y
и т. Д. Работают нормально. Как я уже предлагал ранее, для того, что вы делаете,
вам не нужны два вызова awk
.
Все это можно сделать с помощью
awk -v outdir = "$ outputdirday" '
НАЧАТЬ {FS = "~"
filenameA = outdir "/Customer_Create_Records.dat "
filenameM = outdir" /Customer_Modify_Records.dat"
}
{
if ($ 12 == "A") print >> filenameA
if ($ 12 == "M") print >> filenameM
}
'"$ inputdir / $ sourcefile"
или
awk -v outdir = " $ outputdirday "'
BEGIN {FS =" ~ "
filenameA = outdir" /Customer_Create_Records.dat"
filenameM = outdir "/Customer_Modify_Records.dat"
}
$ 12 == "A" {print >> filenameA}
$ 12 == "M" {print >> filenameM}
'"$ inputdir / $ sourcefile" {{1 }}
Насколько я могу судить, вам вообще не нужно закрывать
файл (ы);
файлы обычно закрываются автоматически при выходе из программы.