উত্তর:
ব্যবহার awk
awk '{for (i=1;i<=NF;i++) sum[i]+=$i;}; END{for (i in sum) print "for column "i" is " sum[i];}' FileA
for column 1 is 8
for column 2 is 11
for column 3 is 7
for column 4 is 5
numsum
সেই কাজের জন্য ব্যবহার করুন এবং ডেটা প্রসেসিং এবং ফলাফলগুলির ফলাফলের মধ্যে পৃথক করুন।
ইনস্টল করুন num-utils
, আমাদের দরকারnumsum
sudo apt-get install num-utils
এবং দিয়ে শুরু
numsum -c <your_file_name>
উদাহরণ
$ cat "File A"
1 2
2 3
4 5 6
1 1 1 5
$ numsum -c "File A"
8 11 7 5
বা আপনার পছন্দসই বিন্যাস সহ:
$ numsum -c "File A" | awk '{for(i=1;i<=NF;i++) {print "for column "i" is "$i}}'
for column 1 is 8
for column 2 is 11
for column 3 is 7
for column 4 is 5
থেকে man numsum
-c Print out the sum of each column.
থেকে উদাহরণ man numsum
EXAMPLES
Add up the 1st, 2nd and 5th columns only.
$ numsum -c -x 1,2,5 columns
15 40 115
Add up the rows of numbers of a file.
$ numsum -r columns
55
60
65
70
75
#!/bin/sh
while read a b c d; do
col1=$((col1 + a))
col2=$((col2 + b))
col3=$((col3 + c))
col4=$((col4 + d))
done < File_A
echo $col1 $col2 $col3 $col4
(( col1 += a ))
, ইত্যাদি বলতে পারেন , এছাড়াও echo "..."
নিরাপদ, পাশাপাশিwhile IFS= read -r ...
echo
এইভাবে সংখ্যার প্রতিধ্বনির জন্য ব্যবহার করা নিরাপদ, শ্বেত স্পেসে $IFS
ডিফল্ট এবং সেগুলি সংখ্যা হওয়ার আশা করা হয়, তাই ব্যাকস্ল্যাশগুলি মোকাবেলা করার দরকার নেই। এই উত্তরের একমাত্র নেতিবাচকতা হ'ল কার্যকর করার পূর্বে কলামগুলির সংখ্যা জানার প্রয়োজন।
echo "[...]"
আপনি যে ফলাফলটি আউটপুট করতে চান না তা সঠিকভাবে মুদ্রণ করতে কোনও অর্থ হয় না।
echo $var
এবং while read a b c
এটি এখানে কাজ করে। তবে, আপনি এটি একটি দুর্বল উপায়ে লিখতে অভ্যস্ত হয়ে যাবেন এবং একদিন আরও জটিল ফাইল প্রক্রিয়াকরণের সময় আপনি অদ্ভুত ত্রুটি পাবেন। তারপরে আপনি ভেরিয়েবলগুলি উদ্ধৃত করা এবং ব্যবহার while IFS= read -r ...
করা নিরাপদ দেখবেন এবং বলবেন "ওহ হ্যাঁ ফেডোরকি ঠিক ছিল, আমি আশা করি তাকে কৃতজ্ঞতা জানাতে আমি তাকে জড়িয়ে ধরতে পারি!"!
আপনার নিজের উত্তরের মন্তব্যে বিচার করে আপনি একবারে কেবল একটি কলামের যোগফল চান। যদি তা হয় তবে এটি করার জন্য এখানে একটি অবাস্তব উপায়:
cut -d' ' -f3 FileA | grep . | paste -s -d+ | bc
যেখানে আপনি 3
আগ্রহী কলাম নম্বরটি দিয়ে প্রতিস্থাপন করবেন ।
এখানে একটি ওয়ান-লাইনার পার্ল স্ক্রিপ্ট পদ্ধতি রয়েছে। এটি -a
ফ্ল্যাগের ব্যবহারের উপর নির্ভর করে যা বর্তমানে অ্যারোতে -n
পতাকা সহ পড়া পংক্তিকে স্বয়ংক্রিয়ভাবে বিভক্ত করতে দেয় @F
। আমাদের যা করতে হবে তা হ'ল সেই আইটেমগুলির পুনরাবৃত্তি, এবং $sum
এটিকে তাদের নিজ নিজ সূচীতে অ্যারেতে যুক্ত করুন, এইভাবে কার্যকরভাবে প্রতিটি অ্যারে আইটেম প্রতিটি স্ব স্তরের জন্য যোগফল। শেষ পর্যন্ত, আমরা ফলাফল END
কোড ব্লকের মধ্যে মুদ্রণ ।
$ perl -lane '$j=0;foreach $i (@F){$sum[$j]+=$i; $j+=1;}; END{print join("\n",@sum)} ' input.txt
8
11
7
5
বিকল্পভাবে, এখানে একটি সম্পূর্ণ পার্ল স্ক্রিপ্ট পদ্ধতির। এটি প্রতিটি রেখাকে অ্যারেতে বিভক্ত করার উপর নির্ভর করে এবং অ্যারেতে প্রতিটি আইটেমকে পুনরুক্ত করে প্রতিটি সংখ্যাকে অ্যারেতে তাদের নিজ নিজ সম্ভাবনায় যুক্ত করে @sums
। স্ক্রিপ্ট প্রতিটি লাইন প্রিন্ট করে, তারপরে প্রতিটি কলামের জন্য প্রতিবেদন তৈরি করে। প্রতিটি লাইন মুদ্রণ #
আগে যোগ করে মুছে ফেলা যাবেprintf("%s",$line);
#!/usr/bin/env perl
use strict;
use warnings;
open(my $fh,"<",$ARGV[0]);
my $i = 0;
my @sums;
while(my $line = <$fh>) {
printf("%s",$line);
my @nums = split(" ",$line);
my $j = 0;
foreach my $num (@nums){
$sums[$j] += $num;
$j += 1;
}
}
my $k = 0;
foreach my $sum (@sums){
printf("- column %d sum: %d\n",$k,$sum);
$k+=1;
}
close($fh);
ব্যবহার সহজ chmod +x ./sum_columns.pl && ./sum_columns.pl input.txt
। উদাহরণ স্বরূপ:
$ ./sum_columns_2.pl input.txt
1 2
2 3
4 5 6
1 1 1 5
- column 0 sum: 8
- column 1 sum: 11
- column 2 sum: 7
- column 3 sum: 5
একটি সহজ সমাধান:
awk '{sum += $i} END {print sum}' file
কলাম নম্বর দিয়ে কলাম নম্বর দিয়ে আই প্রতিস্থাপন করুন:
awk '{sum += $1} END {print sum}' file
আউটপুট হল:
8