sed -E 's/(\t)([0-9])/\1+\2/g' data.file |
while IFS= read -r l; do
set -f; IFS=$'\t'
printf '0%s\n' $l | bc -l | paste -s -
done
sed -e 's/\t\([0-9]\)/\t+\1/' data.file |
while IFS= read -r l; do
set -f; IFS=$'\t'
printf '0%s\n' $l | bc -c |
sed -ne '
$!{
y/:@irKW/ /
s/[^ 0-9]/ & /g
s/[ ][ ]*/ /g;s/^[ ]*//;s/[ ]*$/p/p
}
' | dc | paste -s -
done
Здесь мы генерируем постфиксное
представление математического выражения и перед передачей его на постфиксный калькулятор dc
очищаем нематематическую информацию из вывода bc -c
.
115 6 3
Пример использования Perl
removeCols.pl:
#!/usr/bin/perl
my $file1="input.tsv";
my $file2="remove.txt";
open RFILE, $file2;
@cols=<RFILE>;
open INPUT, $file1;
#read header line, save indicies
my @header = split( /\t/, <INPUT> );
for my $i (0..$#header){
if (grep(/$header[$i]/, @cols)){
push @idx,$i;
$header[$i] = undef;
}
}
print join("\t",grep(defined,@header));
# loop remaining file
while(<INPUT>){
my @line = split(/\t/, $_);
$line[$_] = undef for (@idx);
print join("\t",grep(defined,@line));
}
запуск командной строки как таковой:
приглашение> perl removeCols.pl