Grep 出一个字符串,但不包括第一行

Grep 出一个字符串,但不包括第一行

我想要一个 grep -v 命令,该命令将删除找到的特定字符串的行,而不读取第一行:

订单ID、更改时间戳、条件、状态
OD10,2017-04-25 07:21:13.069,A,D
OD11,2017-04-25 07:21:13.069,A,D
订单ID、更改时间戳、条件、状态
OD14,2017-04-26 07:21:13.069,A,D
OD15,2017-04-26 07:21:13.069,A,D
订单ID、更改时间戳、条件、状态
OD16,2017-04-27 07:21:13.069,A,D
OD17,2017-04-27 07:21:13.069,A,D

期望:

订单ID、更改时间戳、条件、状态
OD10,2017-04-25 07:21:13.069,A,D
OD11,2017-04-25 07:21:13.069,A,D
OD14,2017-04-26 07:21:13.069,A,D
OD15,2017-04-26 07:21:13.069,A,D
OD16,2017-04-27 07:21:13.069,A,D
OD17,2017-04-27 07:21:13.069,A,D

它需要输出到另一个文件而不触及原始文件。

答案1

$ awk 'NR==1 {print; next;} !/orderID/' input.txt > output.txt

更短的语法:

$ awk 'NR==1 || !/orderID/' input.txt > output.txt

答案2

在 shell 中,您可以将文件重定向到复合命令,在其中读取第一行,打印它,然后从流的其余部分中排除该文本:

{ read -r header; echo "$header"; grep -Fv "$header"; } < file

使用此方法,您不必知道标头的内容即可将其排除。

等效的 awk 是

awk 'NR==1 {header = $0; print} $0 == header {next} {print}' file

相关内容