从第一行开始打印奇数行

从第一行开始打印奇数行

我想编写一个 bash 脚本,而不是仅打印文件的奇数行,包括没有使用sed或的第一行awk,也没有 &&、||和 ;

答案1

perl

$ seq 10 | perl -ne 'print if $.%2'
1
3
5
7
9

如果输入不包含制表符,您还可以这样做:

$ seq 10 | paste - - | cut -f1
1
3
5
7
9

使用 GNU grep

$ seq 10 | grep -n '^' | LC_ALL=C grep -Po '^\d*[13579]:\K.*'
1
3
5
7
9

任何状况之下,你不应该使用 shell 循环来处理文本。如果这就是你的老师对这些奇怪要求的期望,请找另一位老师,因为他们会教你不好的做法。 shell 的作用首先是运行其他命令。作为一名 shell 脚本编写者,您希望选择最适合该工作的命令(此处为perlsedawk),或者是一组协同协作的命令,正如 Unix 作者在大约 50 年前发明这些管道时所希望的那样。

答案2

你可以这样做:

while IFS= read -r line
do 
    printf "%s\n" "$line"
    IFS= read -r _
done <"file"

尝试使用seq

while IFS= read -r line
do 
    printf "%s\n" "$line"
    IFS= read -r _
done < <(seq 10)
1
3
5
7
9

相关内容