我有一个表,其中只有偶数行很重要(粗体),
年 | 月 | 日 | 时间 | 纬度 | 隆 | 价值 |
---|---|---|---|---|---|---|
2020 | 1 | 1 | 00:00:00 | 41.97 | 29.68 | 272.4456 |
2020 | 1 | 1 | 00:00:00 | 47.97 | 21.68 | -32767 |
2020 | 1 | 1 | 01:00:00 | 41.97 | 29.68 | 272.3355 |
2020 | 1 | 1 | 01:00:00 | 47.97 | 21.68 | -32767 |
2020 | 1 | 1 | 02:00:00 | 41.97 | 29.68 | 272.1232 |
2020 | 1 | 1 | 02:00:00 | 47.97 | 21.68 | -32767 |
2020 | 1 | 1 | 03:00:00 | 41.97 | 29.68 | 271.8801 |
2020 | 1 | 1 | 03:00:00 | 47.97 | 21.68 | -32767 |
但是,在某些时候,这会变成奇数行。这正是它发生变化的时刻(你可以看到两个连续的“-32767”):
年 | 月 | 日 | 时间 | 纬度 | 隆 | 价值 |
---|---|---|---|---|---|---|
2023 | 9 | 30 | 23:00:00 | 41.97 | 29.68 | 289.2723 |
2023 | 9 | 30 | 23:00:00 | 41.97 | 29.68 | -32767 |
2023 | 10 | 1 | 00:00:00 | 41.97 | 29.68 | -32767 |
2023 | 10 | 1 | 00:00:00 | 41.97 | 29.68 | 288.9512 |
2023 | 10 | 1 | 01:00:00 | 41.97 | 29.68 | -32767 |
2023 | 10 | 1 | 01:00:00 | 41.97 | 29.68 | 288.7689 |
2023 | 10 | 1 | 02:00:00 | 41.97 | 29.68 | -32767 |
我用
sed '1~2d' site8_slt.nc.tsv
提取它们后发现了这一点。有谁知道如何 sed 直到特定行号?这样我会 sed 两次,第一次是在更改之前,然后是在更改之后。
提前致谢!
上下文:我正在从 cds.climate.copernicus.eu 以 netCDF 格式下载数据,然后使用 cdo(气候数据运算符)将数据转换为 csv,并且,我不知道为什么,每行得到 2 个值,其中每个值值始终是填充值-32767。
我已经尝试过:我知道我可以用这个
$ sed '1s/a/b/' file
指向特定的行,但这只会改变一行,我想以某种方式 sed 一行之前的所有行,然后在一个特定的行之后以另一种方式 sed行号。
回答您的具体问题:
$ seq 5 | sed -n '1,3p'
1
2
3
$ seq 5 | sed -n '4,$p'
4
5
但听起来,使用任何 sed 或任何 awk,这些中的任何一个可能对你更有用:
sed '/-32767$/d' file
awk '$NF != -32767' file
例如:
$ cat file
year month day time lat lon value
2020 1 1 00:00:00 41.97 29.68 272.4456
2020 1 1 00:00:00 47.97 21.68 -32767
2020 1 1 01:00:00 41.97 29.68 272.3355
2020 1 1 01:00:00 47.97 21.68 -32767
2020 1 1 02:00:00 41.97 29.68 272.1232
2020 1 1 02:00:00 47.97 21.68 -32767
2020 1 1 03:00:00 41.97 29.68 271.8801
2020 1 1 03:00:00 47.97 21.68 -32767
2023 9 30 23:00:00 41.97 29.68 289.2723
2023 9 30 23:00:00 41.97 29.68 -32767
2023 10 1 00:00:00 41.97 29.68 -32767
2023 10 1 00:00:00 41.97 29.68 288.9512
2023 10 1 01:00:00 41.97 29.68 -32767
2023 10 1 01:00:00 41.97 29.68 288.7689
2023 10 1 02:00:00 41.97 29.68 -32767
$ sed '/-32767$/d' file
year month day time lat lon value
2020 1 1 00:00:00 41.97 29.68 272.4456
2020 1 1 01:00:00 41.97 29.68 272.3355
2020 1 1 02:00:00 41.97 29.68 272.1232
2020 1 1 03:00:00 41.97 29.68 271.8801
2023 9 30 23:00:00 41.97 29.68 289.2723
2023 10 1 00:00:00 41.97 29.68 288.9512
2023 10 1 01:00:00 41.97 29.68 288.7689
$ awk '$NF != -32767' file
year month day time lat lon value
2020 1 1 00:00:00 41.97 29.68 272.4456
2020 1 1 01:00:00 41.97 29.68 272.3355
2020 1 1 02:00:00 41.97 29.68 272.1232
2020 1 1 03:00:00 41.97 29.68 271.8801
2023 9 30 23:00:00 41.97 29.68 289.2723
2023 10 1 00:00:00 41.97 29.68 288.9512
2023 10 1 01:00:00 41.97 29.68 288.7689