Ich möchte die ungeraden und geraden Zeilen aus Dateien drucken.
Ich habe dieses Shell-Skript gefunden, das Echo verwendet.
#!/bin/bash
# Write a shell script that, given a file name as the argument will write
# the even numbered line to a file with name evenfile and odd numbered lines
# in a text file called oddfile.
# -------------------------------------------------------------------------
# Copyright (c) 2001 nixCraft project <http://cyberciti.biz/fb/>
# This script is licensed under GNU GPL version 2.0 or above
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# -------------------------------------------------------------------------
file=$1
counter=0
eout="evenfile.$$" # even file name
oout="oddfile.$$" # odd file name
if [ $# -eq 0 ]
then
echo "$(basename $0) file"
exit 1
fi
if [ ! -f $file ]
then
echo "$file not a file"
exit 2
fi
while read line
do
# find out odd or even line number
isEvenNo=$( expr $counter % 2 )
if [ $isEvenNo -ne 0 ]
then
# even match
echo $line >> $eout
else
# odd match
echo $line >> $oout
fi
# increase counter by 1
(( counter ++ ))
done < $file
echo "Even file - $eout"
echo "Odd file - $oout"
Aber gibt es keine Möglichkeit, dies in einer Zeile zu tun?
Ja, benutze awk, ich lese.
Gerade Zeilen:
awk 'NR % 2' filename
ungeradzahlige Zeilen:
awk 'NR % 2 == 1' filename
Aber bei mir funktioniert es nicht. Beide erzeugen die gleiche Ausgabe, laut Diff. Im Vergleich zur Originaldatei sind beide tatsächlich halb so lang und enthalten die ungeradzahligen Zeilen. Mache ich etwas falsch?
NR % 2 == 0
, sonst ist es gleichbedeutend mit dem zweiten.