echo what you read with IFS

Sample this code for reading a file line by line:

#!/bin/ksh
while read LINE
do
    echo "$LINE"
done < $FILENAME

It works fine in most cases, where by most cases I mean your lines don't have any trailing spaces that you'd like to preserve. That's right, read reserves the right to kill the trailing (and leading) spaces from your lines. Sample this (from ksh man page):

The IFS parameter specifies a list of characters which are used to break a string up into several words; any characters from the set space, tab and newline that appear inthe IFS characters are called IFS white space. Sequences of one or more IFS white space characters, in combination with zero or one non IFS white space characters delimit a field. As a special case, leading and trailing IFS white space is stripped (i.e., no leading ortrailing emptyfield is created by it); leading or trailing non-IFS white space does create an empty field.Example: if IFS is set to `:',the sequence of characters `A:B::D' contains four fields: `A', `B', `' and `D'. Note that if the IFS parameter is set to the null string, no field splitting is done; if the parameter is unset, the default value of space, tab and newline is used.

So, the above code should be changed to this - just the one line added:

#!/bin/ksh
IFS=""
while read LINE
do
    echo "$LINE"
done < $FILENAME

Now the above code gives the byte-by-byte output of the file. Or does it?

Problem is, if the file does not have an empty line at the end you'll see that the last line never shows up in the output! So how do we fix this? The "old-fashioned" way - by adding an extra "echo $LINE" outside the loop.

Does it work fine now? Not quite. Now you'll see an extra empty line at the end of the output file. How do we fix that? Use "echo -n". The "-n" option tells echo not to print the trailing newline character.

So finally we have our code to read a file line by line, do something with that line and write a modified line - and preserve every single bit along the way. Here it is then:

#!/bin/ksh
IFS=""
while read -r LINE
do
    echo "$LINE"
done < $FILENAME
echo -n $LINE

Join Google Groups without Google id

If, like me, you don’t have a Gmail id (shock horror!) it can be a pain trying to figure out how to join a Google Group (( I know you can have a Google id that is NOT a Gmail id, but let’s leave that out for now. )) . Some groups (like the Django ones) do have web pages with a sign-up form, but most don’t. So how do you join those groups without going through all the Google id related shenanigans? Simple – type this in your address bar (and remember to press enter!):

http://groups.google.com/group/GroupName/boxsubscribe?email=emailid

Replace GroupName with the name of the group you want to join and emailid with your email id. In case you didn’t make any typos, you’ll find Google telling you that “a confirmation message has been sent” to your id. Just click on the link in that email and you are good to go.

[tags]Google, Google Groups[/tags]

Potato Potaato?

No donor to the (Bill) Clinton foundation has raised more persistent questions than Frank Giustra, a Canadian mining executive. Mr. Clinton and Mr. Giustra shared a midnight banquet in September 2005 with Kazakhstan’s authoritarian president, Nursultan A. Nazarbayev. Mr. Clinton praised Mr. Nazarbayev’s bid to head an international election-monitoring organization, undercutting American foreign policy and his wife’s sharp criticism of Kazakhstan’s human rights record.

Two days after the trip, Mr. Giustra’s company signed preliminary agreements giving it the right to buy into three uranium projects controlled by Kazakhstan. Spokesmen for both men said there was no connection between the trip and the deal. Months later, a foundation controlled by Mr. Giustra gave $31.3 million to the Clinton foundation, its largest known donation.

Source: NYT.

Politicians in the west play by the same set of rules as Indian schools then – a world where bribes go by the name of “donations”.