IFS - use entire lines in your for cycles

export IFS=$(echo -e "\n")
When you use a "for" construct, it cycles on every word. If you want to cycle on a line-by-line basis (and, well, you can't use xargs -n1 :D), you can set the IFS variable to .
Sample Output
$ cat file
line one
line two
$ for i in `cat file`; do echo $i; done
line
one
line
two
$ export IFS=$(echo -e "\n")
$ for i in `cat file`; do echo $i; done
line one
line two

8
By: darkpand
2009-07-09 15:25:37

These Might Interest You

  • The report mode of mtr produces a text formated result of the mtr run using the number of ping cycles stated by the command. This text file could then be attached to an email with ease. I use this also without the ">" portion when writing email from within mutt using VI from the command mode with ":r !mtr --report --report-cycles 10 Show Sample Output


    9
    mtr --report --report-cycles 10 www.google.com > google_net_report.txt
    CafeNinja · 2009-04-10 07:57:44 0
  • Removes duplicates in the specified field/column while outputting entire lines. An elegant command for processing tab (or otherwise) delimited data.


    1
    awk '!array[$1]++' file.txt
    bede · 2012-08-23 21:04:51 0
  • grep searches through a file and prints out all the lines that match some pattern. Here, the pattern is some string that is known to be in the deleted file. The more specific this string can be, the better. The file being searched by grep (/dev/sda1) is the partition of the hard drive the deleted file used to reside in. The ?-a? flag tells grep to treat the hard drive partition, which is actually a binary file, as text. Since recovering the entire file would be nice instead of just the lines that are already known, context control is used. The flags ?-B 25 -A 100? tell grep to print out 25 lines before a match and 100 lines after a match. Be conservative with estimates on these numbers to ensure the entire file is included (when in doubt, guess bigger numbers). Excess data is easy to trim out of results, but if you find yourself with a truncated or incomplete file, you need to do this all over again. Finally, the ?> results.txt? instructs the computer to store the output of grep in a file called results.txt. Source: http://spin.atomicobject.com/2010/08/18/undelete?utm_source=y-combinator&utm_medium=social-media&utm_campaign=technical


    22
    grep -a -B 25 -A 100 'some string in the file' /dev/sda1 > results.txt
    olalonde · 2010-08-19 20:07:42 4
  • GNU Sed can 'address' between two regex, but it continues parsing through to the end of the file. This slight alteration causes it to terminate reading the input file once the STOP match is made. In my example I have included an extra '/START/d' as my 'start' marker line contains the 'stop' string (I'm extracting data between 'resets' and using the time stamp as the 'start'). My previous coding using grep is slightly faster near the end of the file, but overall (extracting all the reset cycles in turn) the new SED method is quicker and a lot neater. Show Sample Output


    3
    sed -n '/START/,${/STOP/q;p}'
    mungewell · 2009-06-19 15:27:36 1

What Others Think

Not bad. Here's an alternative using read (this doesn't require you to change IFS) while read i; do echo "$i"; done < file (You can cat the file into the while, if you prefer) If you *do* want to alter IFS, you can do it more simply (in bash at least) like this: export IFS=$'\n'
flatcap · 467 weeks ago
A good idea is also to start with a OLDIFS=$IFS Then your loop Then back to real life with IFS=$OLDIFS You can avoid problems by doing this
michauko · 466 weeks and 5 days ago
IFS is a shell-local variable, so there's no need to export it. Also, IFS=$'\n'
h3xx · 360 weeks and 5 days ago

What do you think?

Any thoughts on this command? Does it work on your machine? Can you do the same thing with only 14 characters?

You must be signed in to comment.

What's this?

commandlinefu.com is the place to record those command-line gems that you return to again and again. That way others can gain from your CLI wisdom and you from theirs too. All commands can be commented on, discussed and voted up or down.

Share Your Commands



Stay in the loop…

Follow the Tweets.

Every new command is wrapped in a tweet and posted to Twitter. Following the stream is a great way of staying abreast of the latest commands. For the more discerning, there are Twitter accounts for commands that get a minimum of 3 and 10 votes - that way only the great commands get tweeted.

» http://twitter.com/commandlinefu
» http://twitter.com/commandlinefu3
» http://twitter.com/commandlinefu10

Subscribe to the feeds.

Use your favourite RSS aggregator to stay in touch with the latest commands. There are feeds mirroring the 3 Twitter streams as well as for virtually every other subset (users, tags, functions,…):

Subscribe to the feed for: