如何在 Bash 中从输入文件中写出一个能被 3 整除的行号?

如何在 Bash 中从输入文件中写出一个能被 3 整除的行号?

创建一个 shell 脚本,当输入文件中的行号能被 3 整除时,打印该行的内容。假设第一行是第 1 行。在脚本末尾,如果能被 3 整除的行总数大于 10,则打印“big”。否则,打印“small”。

到目前为止这就是我所拥有的

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

答案1

这是一个awk解决方案。我故意让它保持简单。

$ cat awkfile
BEGIN {
   count = 0;
}

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

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

调用方式如下:

$ awk -f awkfile infile

答案2

这个 Perl 单行代码可以完成这个工作:

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

解释:

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

相关内容