[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Oneliner - X letzte Felder ausgeben



Hallo,

Am Die, 28 Nov 2006, Aleks schrieb:
>David Haller wrote:
>>Am Die, 28 Nov 2006, Aleks schrieb:
>>| awk '{while(i>0){printf "%s ",$(NF-i); i--; } }END{print""}' i=2
>>| awk -v i=2 '{while(i>0){printf "%s ",$(NF-i);i--;}}END{print"";}'
>>
>>Oder noch etwas verfeinert:
>>
>>| awk -v f=3 '{ i=f;     
>>                while( i > 0 ) {
>>                    printf "%s ", $(NF-i);
>>                    i--;  
>>                }
>>                if( f > 0 ) { print""; }
>>              }'
>>
>>Funktioniert dann auch mit mehreren Zeilen ;)
>>
>mmmh, bei mir funktionieren die alle nicht für mehrere Zeilen.

Nur das letzte.

>Die letzte schmeißt nen Fehler..

Welchen?

Korrektur (habe nen Sonderfall nicht beachtet):

$ echo "lala lulu lili bambam bumbum
bambam bumbum lala lulu lili
foo bar" | awk -v f=2 '
{
    i=f;
    if( f < NF ) {
        while( i > 0 ) {
            printf "%s ", $(NF-i); 
            i--;
        }
        if( f > 0 ) { print""; }
    } else {
        print;
    }
}'
lili bambam 
lala lulu 
foo bar
$ awk --version | head -n 1
GNU Awk 3.0.4

>Wie wäre es mit:
>
>$ cat data
>lala lulu lili
>bambam bumbum
>$ cat data|perl -ane'$i=1;for(reverse(0..$i)){next if 
>$#F<$_;print"$F[$#F-$_] "};print"\n"'
>lulu lili
>bambam bumbum
>$

Nochwas:

$ echo "lala lulu lili bambam bumbum
bambam bumbum lala lulu lili
foo bar" | perl -ane '$i=2; if ( $i < $#F ) {
    print join(" ", @F[$#F-$i .. $#F]), "\n";
    } else { print; }'
lili bambam bumbum
lala lulu lili
foo bar
$ echo "lala lulu lili bambam bumbum
bambam bumbum lala lulu lili
foo bar" | perl -ane '$i=1; if($i<$#F) {
    print join(" ", @F[$#F-$i .. $#F]), "\n";
    } else { print; }'
bambam bumbum
lulu lili
foo bar
$ 

*g*

-dnh

-- 
Ed Masry: Wie kommen sie auf die Idee, daß Sie da einfach reinschneien
und Akten mitnehmen können?
Erin Brockovich: Hey, wozu habe ich Titten?



Reply to: