geo*_*ing 21 shell grep sed awk shell-script
我需要删除第 8 个字段(列)中值为 2 或更少的每一行。
我的数据如下所示:
12-31 Airport 189 379 41 49.70946503 -124.91377258 2 2880 30.8
01-01 AlberniElementary 165 331 16 49.26100922 -124.80662537 4 5760 26.1
01-09 BamfieldMarine 161 323 23 48.83490372 -125.13572693 2 2875 27.4
01-10 BamfieldMarine 161 323 23 48.83490372 -125.13572693 3 3068 38.6
Run Code Online (Sandbox Code Playgroud)
我知道使用 awk 我可以剥离所需的值并将它们打印到另一个文件,我知道 sed 会编辑当前文件。无论哪种情况,我都需要保留原始文件。
注意:请对您的解决方案提供详尽的解释。仅写命令是不够的,请注释建议。
进一步注意:数据有一个标题行,所以最有可能的解决方案需要
awk 'FNR >1'
我想?
Arc*_*mar 25
你几乎明白了。
awk '(NR>1) && ($8 > 2 ) ' foo > bar
Run Code Online (Sandbox Code Playgroud)
在哪里
NR 是记录数(即行数)$8 是八场&& 是合乎逻辑的foo 是原始文件,未更改bar 结果文件请注意,header 是从 foo 到 bar 条带化的,以保留它
awk '(NR==1) || ($8 > 2 ) ' foo > bar
Run Code Online (Sandbox Code Playgroud)
在哪里
|| 是合乎逻辑的或指定范围
( ($8 >= -4) && ( $8 <= 4 ) ) 从 -4 到 4 的第 8 场(NR == 1 ) || ( ($8 >= -4) && ( $8 <= 4 ) ) 相同,包括标题