line parsing with pipe ability