基于三列的子集文件的awk方法
awk approach to subset file based on three columns
我有一个 .BED 格式的文件 (input.bed)
less input.bed
A 678 934 0bb6fdb5 0 +
A 715 986 8bc17666 0 +
A 716 1029 065f9d32 0 -
A 769 1367 572ae096 0 +
B 801 924 e6f469bf 0 +
B 876 1007 384622c7 0 +
B 921 1118 9f8bdbbb 0 -
C 1038 1841 f9a29a0g 0 +
C 1078 1929 9cd655be 0 +
我想从 LINUX 命令行中对文件进行子集化,并生成一个新文件,其中包含第一列中带有“A”的所有行、第二列中大于 715 的值以及一个第三列中的值小于 1367。
我试过使用 awk
awk -F ' == "A" && >= 715 && <= 1367' input.bed > output.bed
但我收到错误消息:
awk: cmd. line:1: input.bed
awk: cmd. line:1: ^ syntax error
所需的输出如下所示
less output.bed
A 715 986 8bc17666 0 +
A 716 1029 065f9d32 0 -
A 769 1367 572ae096 0 +
请尝试按照您显示的示例进行操作。假设您的 Input_file 是 space 分隔符,那么我们不需要使用 space 分隔符,因为这是 awk
的默认分隔符(在您尝试的代码中,没有为字段分隔符设置值是引起问题)。如果您使用制表符作为字段分隔符,请在以下代码中将 awk
更改为 awk 'BEGIN{FS=OFS="\t"}
。
awk '=="A" && >=715 && <=1367' Input_file
解释: 简单的解释就是,如果第一个字段是 A,第二个字段大于或等于 715,则检查 2 个条件AND 第三个字段小于或等于 1367 然后打印该行。一旦您对上面的代码(将在终端上打印行)感到满意,然后附加 > output.bed
以从程序中获取输出文件。
注意: 对于 OP 的声明:
a value larger than 715 in the second column, and a value smaller than
1367 in the third column.
如果我们不想包含 715 和 1367 值,则将条件更改为:
awk '=="A" && >715 && <1367' Input_file
我有一个 .BED 格式的文件 (input.bed)
less input.bed
A 678 934 0bb6fdb5 0 +
A 715 986 8bc17666 0 +
A 716 1029 065f9d32 0 -
A 769 1367 572ae096 0 +
B 801 924 e6f469bf 0 +
B 876 1007 384622c7 0 +
B 921 1118 9f8bdbbb 0 -
C 1038 1841 f9a29a0g 0 +
C 1078 1929 9cd655be 0 +
我想从 LINUX 命令行中对文件进行子集化,并生成一个新文件,其中包含第一列中带有“A”的所有行、第二列中大于 715 的值以及一个第三列中的值小于 1367。
我试过使用 awk
awk -F ' == "A" && >= 715 && <= 1367' input.bed > output.bed
但我收到错误消息:
awk: cmd. line:1: input.bed
awk: cmd. line:1: ^ syntax error
所需的输出如下所示
less output.bed
A 715 986 8bc17666 0 +
A 716 1029 065f9d32 0 -
A 769 1367 572ae096 0 +
请尝试按照您显示的示例进行操作。假设您的 Input_file 是 space 分隔符,那么我们不需要使用 space 分隔符,因为这是 awk
的默认分隔符(在您尝试的代码中,没有为字段分隔符设置值是引起问题)。如果您使用制表符作为字段分隔符,请在以下代码中将 awk
更改为 awk 'BEGIN{FS=OFS="\t"}
。
awk '=="A" && >=715 && <=1367' Input_file
解释: 简单的解释就是,如果第一个字段是 A,第二个字段大于或等于 715,则检查 2 个条件AND 第三个字段小于或等于 1367 然后打印该行。一旦您对上面的代码(将在终端上打印行)感到满意,然后附加 > output.bed
以从程序中获取输出文件。
注意: 对于 OP 的声明:
a value larger than 715 in the second column, and a value smaller than 1367 in the third column.
如果我们不想包含 715 和 1367 值,则将条件更改为:
awk '=="A" && >715 && <1367' Input_file