awk error

Hi all,

i have the files in the below sequence:

fancy_LANG_STD_AU_2008-03-05.dat
fancy_LANG_STD_HK_2008-03-06.dat
fancy_LANG_STD_NZ_2008-03-05.dat
fancy_STD_AU_2008-03-05.dat
fancy_STD_HK_2008-03-06.dat
fancy_STD_NZ_2008-03-05.dat

i am trying to sort them like below:

fancy_STD_AU_2008-03-05.dat
fancy_LANG_STD_AU_2008-03-05.dat
fancy_STD_HK_2008-03-06.dat
fancy_LANG_STD_HK_2008-03-06.dat
fancy_STD_NZ_2008-03-05.dat
fancy_LANG_STD_NZ_2008-03-05.dat

the script shows something like this

local flist="$@"
local filelist=`echo $flist | awk '{
while (++i<=NF) {
split($i,x,"_");
y=(x[2]=="LANG")?4:3;
print x[y],y,$i}
}' | sort -t"-" +1 +2 | awk '{print $3}'`;

I am having a small problem,when the number of files to be sorted increases,I am getting an error like below

: Input line FANCY_LANG_STD_AU_20 cannot be longer than 3,000 bytes.

I am using hp-ux and gawk does not seem to work.Any workaround.I guess there is a "fold" command but not sure if that will fulfill my needs.

Any thoughts?

Regards,
Raju

There is a limit to command line size. gawk has nothing to do with it. Place your input filenames into a file our use ls directly:


local filelist=`ls fancy*.dat | awk '{
while (++i<=NF) {
split($i,x,"_");
y=(x[2]=="LANG")?4:3;
print x[y],y,$i}
}' | sort -t"-" +1 +2 | awk '{print $3}'`;

The maximum size of an input line is limited by LINE_MAX. getconf LINE_MAX tells you how long an input line can be.

ls -1 fancy* | \
awk -F"LANG_" '{
    if (NF==2)
       p[$1$2]=$0
    else
       q[$0]
} END {
  for (i in q)
      printf("%s\n%s\n", i, p)}'

local flist="$@"
local tempfile=`echo $flist`
local filelist=`cat $tempfile | awk '{
while (++i<=NF) {
split($i,x,"_");
y=(x[2]=="LANG")?4:3;
print x[y],y,$i}
}' | sort -t"-" +1 +2 | awk '{print $3}'`;

Now i am getting cannot open file fancy_LANG_STD_AU_2008-03-05.dat no such file or directory....

???