यह एक हैक के साथ सरल है। जब मैंने अतीत में भी कुछ ऐसा ही किया था, तो मैंने ऐसा किया था (लेकिन इसे ठीक से करने के लिए आपको अपनी फ़ाइल की कुल पंक्तियों को पहले पता लगाना होगा और लाइनों के अंत के बाद लाइनों को पकड़ना बंद करना होगा अन्यथा आपको ctrl-c को समाप्त करने की आवश्यकता है यदि आप $ tot_lines% $ col_num == 0 नहीं है तो लूप और आप अंतिम पंक्ति को ढीला कर देंगे।
perl -lne '$|=1; $c1= $_; $c2=scalar <>; $c3=scalar <>; \
chomp($c1, $c2, $c3); \
print join("|", $c1, $c2, $c3); \
' \
long_text_60_chars.txt \
| less
यह आसान उत्तर है जहां इनपुट लाइनें लाइन वार फैलती हैं।
[नोट] अगर आप इसे पास करना चाहते हैं तो आपको प्रिंट अनबफर करने की आवश्यकता है less
(इनपुट प्रतीक्षा के कारण <>
जब कम लाइनों चाहता था <>
)
आप अपने आप को जटिल करते हैं और कॉलम-वार फैलाने वाली लाइनें चाहते हैं, लेकिन फिर आपको पेजर लाइन्स के आकार और आपकी फ़ाइल की कुल पंक्तियों को जानना होगा। एक 50 लाइनों पेजर के लिए:
perl -lne 'BEGIN{$|=1; $max = 1301; $cl = 50; $pl = $cl*3; $pleft=$max % $pl; $cleft=$max % $cl; $pmax=$max - $pleft; $cmax=$max - $cleft; print "cleft $cleft, pleft $pleft, pmax $pmax, cmax $cmax"}; if ($.<=$pmax){ @c1= ($_,map{$x=<>;chomp $x;$x} 2..$cl); @c2=map{$x=<>;chomp $x;$x} 1..$cl; @c3=map{$x=<>;chomp $x;$x} 1..$cl; foreach my $idx (0..($cl-1)){ print join("|", $c1[$idx], $c2[$idx], $c3[$idx]) }; print (q{=} x (3*60).qq{\n}); print "line $., pmax $pmax"; } else { print }' long_text_60_chars_with_num_line.txt | less
मैंने बहुत सी डिबगिंग जानकारी डाल दी है ताकि आप इसे अपनी आवश्यकताओं के अनुकूल बना सकें।
यहाँ एक संस्करण मानव के अनुकूल है (लेकिन कॉपी पेस्ट काम नहीं कर सकता है)
perl -lne 'BEGIN{$|=1; \
# max num lines (from wc -l) \
$max=1301; \
#lines per col \
$cl=50; \
# lines per pager \
$pl=$cl*3; \
# remainder lines for pager \
$pleft=$max % $pl; \
# remainder lines for col \
$cleft=$max % $cl; \
# max line for last full 3col page \
$pmax=$max - $pleft; \
# max line for last full column \
$cmax=$max - $cleft; \
# print info \
print "cleft $cleft, pleft $pleft, pmax $pmax, cmax $cmax"}; \
# END BEGIN \
# START -n while LOOP \
if ($.<=$pmax){ \
# full 3col pages \
@c1= ($_,map{$x=<>;chomp $x;$x} 2..$cl); \
@c2=map{$x=<>;chomp $x;$x} 1..$cl; \
@c3=map{$x=<>;chomp $x;$x} 1..$cl; \
foreach my $idx (0..($cl-1)){ \
print join("|", $c1[$idx], $c2[$idx], $c3[$idx]) \
}; \
print (q{=} x (3*60).qq{\n}); \
print "line $., pmax $pmax"; \
} else { \
# lazy approach: everyting else one column \
print \
}' \
long_text_60_chars_with_num_line.txt \
| less