FIle A
"A" 2 aa 34
3 ac
5 cd
"B" 3 hu 67
4 fg
5 gy
output shud be
A"" 2 aa 34
"A" 3 ac 34
"A" 5 cd 34
"B" 3 hu 67
"B" 4 fg 67
"B" 5 gy 67
FIle A
"A" 2 aa 34
3 ac
5 cd
"B" 3 hu 67
4 fg
5 gy
output shud be
A"" 2 aa 34
"A" 3 ac 34
"A" 5 cd 34
"B" 3 hu 67
"B" 4 fg 67
"B" 5 gy 67
something like this.
previous_filed.pl
#!/usr/bin/perl
while (<>) {
if (/(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/) {
$pr_1=$1;
$pr_4=$4;
print $_;
}
else
{
chomp;
print $pr_1,$_,"\t",$pr_4,"\n";
}
}
invocation
perl previous_filed.pl inputfile
Hi
#awk 'NF>2{a=$1;b=$4;$1=$1;print;next;}{$1=$1;print a,$0,b;}' file
"A" 2 aa 34
"A" 3 ac 34
"A" 5 cd 34
"B" 3 hu 67
"B" 4 fg 67
"B" 5 gy 67
Guru.
With awk:
awk 'NF==4 {a=$1; b=$4; print; next} {print a, $0, b}' infile
"A" 2 aa 34
"A" 3 ac 34
"A" 5 cd 34
"B" 3 hu 67
"B" 4 fg 67
"B" 5 gy 67
If you want it a bit more properly aligned, you might want to use printf instead of print.
my ($a,$b);
while(<DATA>){
chomp;
if(/^(".*?").* (\S*)$/){
$a=$1;
$b=$2;
print $_,"\n";
}
else{
print $a," ",$_," ",$b,"\n";
}
}
__DATA__
"A" 2 aa 34
3 ac
5 cd
"B" 3 hu 67
4 fg
5 gy
Nice.
Another awk aprox:
awk '{if ( /"/){a=$1;b=$NF}else{$0=a""$0" "b}}1' file