for i in table1 table2 table3 table4
perl -ne 's/ *\|/\|/g; print' ${AHS_DATA}/${i} > ./${i}.dat

what does perl -ne 's/ *\|/\|/g; print' ${AHS_DATA}/${i} > ./${i}.dat mean?

Edited by happygeek: fixed formatting

9 Years
Discussion Span
Last Post by masijade

The experts here will correct and berate me if I am wrong, but while I don't under stand what the

[B]'s/ *\|/\|/g;[/B]

code means, the entire line of

[B]perl -ne 's/ *\|/\|/g; print' ${AHS_DATA}/${i} > ./${i}.dat [/B]

Appears to calculate the variable AHS_DATA divided by the variable i and outputs the result to i.dat...
This statement:

[B]'s/ *\|/\|/g;[/B]

appears to be some formatting instructions, but don't take my word on it...


-n means suppress output (i.e. read the lines in the file, but don't output them). s/ *\|/\|/g; means replace all occurrences of of zero or more whitespace followed ba a "|" (i.e. "|", or " |", or " |") with "|" .

And the print after that means output the lines where the "command" actually did anything (i.e. any line that did not have any occurrences of "|" will not be output). ${AHS_DATA} is a variable holding a directory name. ${i} is the variable from the loop (table1 or table2 or table3 etc), and references a file of that name in the above directory. sed will read this file for the "lines" of input referenced above. > ./${i}.dat means that all output should go into a file in the currect directory called table1.dat (or table2.dat , or table3.dat , etc, depending on the value of ${i} )

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.