我有 4 列、10000 行的数据。我正在尝试删除第二列的值小于前一行第三列的行。
chr1 10 20 3
chr1 15 30 9
chr1 55 60 1
答案1
awk '$2 >= prev; {prev=$3}' file.txt
解释
awk <commands> file.txt
:运行 awkfile.txt
。$2 >= prev
:检查第二个字段是否$2
大于或等于变量的内容prev
。 (第一行未设置。)如果这是 true,则 awk 默认打印整行。 (即如果小于,则删除该行。){prev=$3}
:将第三个字段的内容存储$3
在变量中prev
。
然后对下一行重复此操作。 awk 会将第二个字段与 进行比较prev
,后者现在包含前一行的第三个字段。有几点需要注意:
- 我不确定您想要第一行什么,所以我只是根据您的需要手动包含/排除它。
- 如果数据实际上是制表符分隔的,只需将以下标志添加到 awk 中以使其知道:
-F'\t'
。