Hi everyone,
I want to write a function which calculates the space needed between fields, to generate a table with aligned fields, like when you type "ls -l", the operating system generates a table with beautifully aligned fields.
I've got this code so far:
Code:
for line in $(cat tmpSearch)
do
line=`echo $line | tr ":" " "`
x=0
for field in $line
do
x=`expr $x + 1`
lineLength=`eval \`echo "gawk -F: '{print \\\\$\$x}' tmpSearch | gawk '{print length}' | sort -n | tail -n 1"\``
fLine[$x]="`eval \`echo \"echo \$field | gawk '{printf \\"%-\"$lineLength\"s\\\\\n\\",\\\\$0}'\"\``"
done
echo "${fLine[@]:1}"
done
Original file: tmpSearch
Code:
000001:Mia:Miki:19871221:20090401:20471221:SSK:7000:7700
000002:Mia:Sean:19800101:20090401:20500101:SK:3000:3210
000003:Mia:Boo:19641020:20090401:20241020:SK:7000:7490
000004:Mia:Nya:19921123:20090401:20521123:SSK:7000:7700
000005:Mia:Nya:19921123:20090405:20521123:SK:7000:7490
000006:Mia:Nya:20001010:20001210:20601010:SSK:400000:440000
000007:Mia:Nya:20051010:20061010:20651010:HSK:2000:2160
000008:Mia:Nya:19871221:20090401:20471221:SSK:5000:5500
000009:Mia:Nya:19800101:20090401:20500101:SK:3000:3210
000010:Mia:Miki:19871221:20090401:20471221:SSK:7000:7700
000011:Mia:Miki:19871221:20090401:20471221:SSK:7000:7700
000012:Mia:Miki:19800101:20090401:20500101:SK:7000:7490
000013:Mia:Miki:20001010:20041010:20601010:HSK:7000:7560
000014:Mia:Miki:19800101:19801011:20500101:SK:70000:74900
Result:
Code:
000001 Mia Miki 19871221 20090401 20471221 SSK 7000 7700
000002 Mia Sean 19800101 20090401 20500101 SK 3000 3210
000003 Mia Boo 19641020 20090401 20241020 SK 7000 7490
000004 Mia Nya 19921123 20090401 20521123 SSK 7000 7700
000005 Mia Nya 19921123 20090405 20521123 SK 7000 7490
000006 Mia Nya 20001010 20001210 20601010 SSK 400000 440000
000007 Mia Nya 20051010 20061010 20651010 HSK 2000 2160
000008 Mia Nya 19871221 20090401 20471221 SSK 5000 5500
000009 Mia Nya 19800101 20090401 20500101 SK 3000 3210
000010 Mia Miki 19871221 20090401 20471221 SSK 7000 7700
000011 Mia Miki 19871221 20090401 20471221 SSK 7000 7700
000012 Mia Miki 19800101 20090401 20500101 SK 7000 7490
000013 Mia Miki 20001010 20041010 20601010 HSK 7000 7560
000014 Mia Miki 19800101 19801011 20500101 SK 70000 74900
My code seems not good that it takes too much time to process.
Please help me to make it better.
I'm very new to shell scripting and trying to learn. If possible, please explain the meaning of the code.
I'm sorry for my bad English.
Any help is much appreciated.