আমি ফাইলগুলি থেকে বিজোড় সংখ্যাযুক্ত এবং সমান সংখ্যাযুক্ত লাইনগুলি মুদ্রণ করতে চাই।
আমি এই শেল স্ক্রিপ্টটি পেয়েছি যা প্রতিধ্বনি ব্যবহার করে।
#!/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"
কিন্তু এটি এক লাইনে করার উপায় নেই?
হ্যাঁ, কুয়াশা ব্যবহার করুন, আমি পড়েছি।
সমান সংখ্যাযুক্ত রেখা:
awk 'NR % 2' filename
বিজোড় সংখ্যাযুক্ত রেখা:
awk 'NR % 2 == 1' filename
তবে এটি আমার পক্ষে কাজ করে না। উভয় পৃথক অনুযায়ী একই আউটপুট উত্পাদন করে। মূল ফাইলের সাথে তুলনা করা হলে এগুলি উভয়ই অর্ধেক লম্বা এবং তারা উভয়ই বিজোড়-সংখ্যাযুক্ত লাইন ধারণ করে। আমি কি ভুল কিছু করছি?
NR % 2 == 0
, অন্যথায় এটি দ্বিতীয়টির সমান।