3 votes

comment écrire un numéro de ligne divisible par 3 en bash à partir d'un fichier d'entrée ?

Créer un Shell Shell qui imprime le contenu de la ligne lorsque le numéro de la ligne est divisible par 3 à partir d'un fichier d'entrée. Supposons que la première ligne soit la ligne 1. A la fin du Shell, si le nombre total de lignes divisibles par 3 est supérieur à 10, on imprime "big". Sinon, imprimez "small".

Jusqu'à présent, voici ce que j'ai

echo $1
file=$1

awk 'NR%2==0' $file

count=$(wc -l $file | grep -o "^[0-9]")
if [ $count -gt 20 ]
then
   printf "\nbig\n"
else
   printf "\nsmall\n"
fi

3voto

Jeff Points 3417

Voici un awk solution. Je l'ai délibérément gardée simple.

$ cat awkfile
BEGIN {
   count = 0;
}

NR % 3 == 0 {
   count++
   print
}

END {
   print ""
   if (count > 10)
      print "big"
   else
      print "small"
}

Invoquer en tant que :

$ awk -f awkfile infile

1voto

Toto Points 14447

Cette ligne unique en Perl fait l'affaire :

perl -ane 'next if $.%3;$c++;print}{print($c>10?"big\n":"small\n")' file

Explication :

perl -ane           # invoque perl compiler

'
  next if $.%3;     # next record if num_line modulo 3 is different than zero
  $c++;             # increment counter
  print             # print current line
  }{                # end of process
  print(            # print
    $c>10?          # if counter > 10
    "big\n"             # print "big" and newline
    :               # else
    "small\n"           # print "small" and newline
  )                 # end print
' 

file                # file to be processed

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X