创建一个 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