The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
.
google unix.com



Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Newbie help with New Line & Blank Line kthatch UNIX for Dummies Questions & Answers 5 01-23-2009 04:19 PM
sed: delete regex line and next line if blank one71 Shell Programming and Scripting 2 09-18-2008 06:53 AM
How to get last non-blank line? tqlam Shell Programming and Scripting 6 01-17-2008 07:13 PM
Blank line ? varungupta UNIX for Advanced & Expert Users 2 09-10-2007 01:52 PM
cant find command that returns blank line jeffersno1 UNIX for Dummies Questions & Answers 2 11-15-2001 04:14 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Search this Thread Rate Thread Display Modes
  #1 (permalink)  
Old 03-18-2009
ddrew78 ddrew78 is offline
Registered User
  
 

Join Date: Mar 2009
Posts: 8
Find line before blank

Hello,

I actually have two issues. First, here is the file the way it is now.

someword someword:1
new-word new-word abcd
someword someword:10
new-word new-word abcd
thisis whatIneed:3


someword someword:5
new-word new-word abcd

I need to get the line before the 2 blanks and move it to a different file. I've tried using sed, but keep getting error messages. Also, there may be none, one, or several instances of this within the file.

I should probably also mention that this is part of a larger perl script I'm working on. I have everything else done, the file above is actually generated by the script. I also have everything below it complete, but am completely stuck at this point.

Any help with either would be appreciated.

Last edited by ddrew78; 03-18-2009 at 07:43 PM..
  #2 (permalink)  
Old 03-18-2009
summer_cherry summer_cherry is online now Forum Advisor  
Registered User
  
 

Join Date: Jun 2007
Location: Beijing China
Posts: 1,099
roughly thought of below, hope can help you some


Code:
open $fh,"<","yourfile";
open $out,">>","youroutfile";
undef $/;
$str=<$fh>;
print $out split(/\n^$\n^$\n/s,$str,2)[0];

  #3 (permalink)  
Old 03-18-2009
aaaaargh aaaaargh is offline
Registered User
  
 

Join Date: Aug 2006
Posts: 20
Here is mine, ugly but should do the trick

(not tested)


Code:
awk 'BEGIN{i=0}
  { content[NR]=$0; if (($0=="")) {b[i]=NR;i++} j++;} 
  END 
 { 
   for (x=0;x<=b[0];x++) 
  {print content[x] > "file1" } for (x=b[1];x<=j; x++) { print content[x] > "file2"}   
}'  /var/tmp/file

  #4 (permalink)  
Old 03-19-2009
ddrew78 ddrew78 is offline
Registered User
  
 

Join Date: Mar 2009
Posts: 8
Re: Find line before blank

summer cherry,

here is what I ended up with in my script:

#!/usr/bin/perl

open $fh,"<","myfile";
open $out,">>","mynewfile";
undef $/;
$str=<$fh>;
print $out split(/\n^$\n^$\n/s,$str,2)[0];

I got the error message below. Any ideas? I appreciate the help.

syntax error at ansipre2 line 7, near ")["
Execution of ansipre2 aborted due to compilation errors.
  #5 (permalink)  
Old 03-19-2009
ddrew78 ddrew78 is offline
Registered User
  
 

Join Date: Mar 2009
Posts: 8
Re: Find line before blank

Quote:
Originally Posted by aaaaargh View Post
Here is mine, ugly but should do the trick

(not tested)


Code:
awk 'BEGIN{i=0}
  { content[NR]=$0; if (($0=="")) {b[i]=NR;i++} j++;} 
  END 
 { 
   for (x=0;x<=b[0];x++) 
  {print content[x] > "file1" } for (x=b[1];x<=j; x++) { print content[x] > "file2"}   
}'  /var/tmp/file


Thanks for the reply. Unfortunately I'm new to this and can't figure out how to implement this into my script. Below is the last two lines of the script to get the file I had above.

system "dos2unix ansi3 > ansi7";
system "mv ansi7 ansi3";

Thanks again for any help.
  #6 (permalink)  
Old 03-19-2009
rikxik's Avatar
rikxik rikxik is offline
Registered User
  
 

Join Date: Dec 2007
Posts: 250

Code:
$ cat sd
sed -n '/^$/!{
h
}
/^$/{
N
/^\n$/ {
x
p
q
}
}' fl
$
$ cat fl
someword someword:1
new-word new-word abcd
someword someword:10
new-word new-word abcd
thisis whatIneed:3


someword someword:5
new-word new-word abcd
$
$ sd
thisis whatIneed:3

Be careful when you cut paste this - there MUST NOT be any trailing spaces.

Last edited by rikxik; 03-19-2009 at 10:49 PM..
  #7 (permalink)  
Old 03-20-2009
ddrew78 ddrew78 is offline
Registered User
  
 

Join Date: Mar 2009
Posts: 8
Thanks to all who helped me on this. After much pain I decided to go a different route and instead appended the repeating string to it's previous line. Granted, that resulted in a few extra lines of code, but what the heck. Just an FYI, below is the code that ended up giving me the lines I was originally looking for.



open(FILE7, ">file7");
open(MYINPUTFILE, "file3");

while(<MYINPUTFILE>) {
chomp;
my $someword = "";
my $new-word = "";
if (/^someword/) {$someword = $_;while(<MYINPUTFILE>) {chomp;
if (/^new-word/){
print FILE7 "$someword $_";
print FILE7 "\n";}
last;
}
}
}
system "mv file7 file3";
system "dos2unix file3 > file7";
system "mv file7 file3";
system 'cat file3 | cut -d " " -f1-2 >>file0';
system "sort -n file0 >file1";
system "mv file1 file0";
system "sort file0 | uniq -u > file1";
system "mv file1 file0";
Closed Thread

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT -4. The time now is 09:05 PM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright ©2007 - 2008, PixelFX Studios
The UNIX and Linux Forums Content Copyright ©1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant URLs by vBSEO 3.2.0