LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   Need a script to remove last comma in a file (https://www.linuxquestions.org/questions/programming-9/need-a-script-to-remove-last-comma-in-a-file-612372/)

makyo 01-14-2008 01:30 PM

Hi.

Here are some timings for many of the suggestions:
Code:

% ./do-time

 Sample of input /tmp/one-mb.txt (1013897 characters):
    1  Sun Jan 13 08:38:16 CST 2008
    2
    3  Egghead genial trident Ostrander snuggly.  Dumpy smuggle ptict grirgadsy
    4  Mallory.  Herman Melville Airway fight ten Sproul spoken morass?
    5  Swerve ostracism cap schema betwixt passenger Himalaya frivolity.
  ...
 16562
 16563  Ago grapevine eradicable bedim electret cyanate component?  Moby Dick
 16564  Nineveh stearate Amsterdam other pronounce octuwoft wharf kidnapped
 16565  catatonia.  Posterior emphatic weapon today Freeport krobs strulchuct
 16566  Rodriguez.

 Timing for perl (general (first run)):
 (debug, pattern is :,:)
 (debug, read 16566 lines.)
 (debug, matched and changed at line 16501)
0.03user 0.00system 0:00.05elapsed 70%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+1450minor)pagefaults 0swaps

 Timing for perl (general (second run)):
 (debug, pattern is :,:)
 (debug, read 16566 lines.)
 (debug, matched and changed at line 16501)
0.03user 0.00system 0:00.04elapsed 75%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+1450minor)pagefaults 0swaps

 Timing for perl (general, re-write):
0.02user 0.01system 0:00.05elapsed 67%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+1224minor)pagefaults 0swaps

 Timing for sed:
0.05user 0.00system 0:00.06elapsed 82%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+491minor)pagefaults 0swaps

 Timing for awk:
0.06user 0.00system 0:00.08elapsed 86%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+1181minor)pagefaults 0swaps

 Timing for perl (one-liner):
0.02user 0.00system 0:00.03elapsed 67%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+668minor)pagefaults 0swaps

 Timing for perl (one-liner slurp):
0.01user 0.00system 0:00.02elapsed 66%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+1948minor)pagefaults 0swaps

 Timing for perl (one-liner reverse slurp):
0.02user 0.00system 0:00.03elapsed 81%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+1514minor)pagefaults 0swaps

Even with a 1 MB file, the timings are close enough such that the decision would be based on factors other than time.

If I were putting this into a Makefile, I'd probably choose osor's slurp reverse one-liner: it's short, fast, and doesn't assume the next-to-last line. I'd fiddle around with it to try to get it to re-write in-place (I tried it with "-i", but it didn't work for me -- cleared the file, wrote to STDOUT).

Best wishes ... cheers, makyo


All times are GMT -5. The time now is 09:54 PM.