Saya ingin mencetak baris bernomor ganjil dan genap dari file.
Saya menemukan skrip shell yang menggunakan gema.
#!/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"
Tetapi apakah tidak ada cara untuk melakukannya dalam satu baris?
Ya, gunakan awk, saya baca.
Baris genap:
awk 'NR % 2' filename
garis ganjil:
awk 'NR % 2 == 1' filename
Tetapi itu tidak berhasil untuk saya. Keduanya menghasilkan output yang sama, menurut diff. Jika dibandingkan dengan file asli, mereka berdua memang setengah panjang, dan mereka berdua berisi baris bernomor ganjil. Apakah saya melakukan sesuatu yang salah?
NR % 2 == 0
, kalau tidak setara dengan yang kedua.