簡體   English   中英

根據awk中的多個列值刪除行

[英]remove rows based on multiple columns values in awk

我試圖使用awk從文本文件中刪除基於等於7的第四列值和小於30的第五列值的行。

這是我的文本文件

1 1 2017 7 00 00 95.197469 112.803277    
1 1 2017 7 05 00 94.139040 113.255244  
1 1 2017 7 10 00 93.084220 113.715022  
1 1 2017 7 15 00 92.033141 114.182867  
1 1 2017 7 20 00 90.985940 114.659045  
1 1 2017 7 25 00 89.500772 115.143830  
1 1 2017 7 30 00 88.574990 115.637504  
1 1 2017 7 35 00 87.614221 116.140360  
1 1 2017 7 40 00 86.633495 116.652701  
1 1 2017 7 45 00 85.642547 117.174839  
1 1 2017 7 50 00 84.647055 117.707097  
1 1 2017 7 55 00 83.650410 118.249809  
1 1 2017 8 00 00 82.654745 118.803319  
1 1 2017 8 05 00 81.661486 119.367982  
1 1 2017 8 10 00 80.671646 119.944164  
1 1 2017 8 15 00 79.685987 120.532243  
1 1 2017 8 20 00 78.705118 121.132609  
1 1 2017 8 25 00 77.729550 121.745662  
1 1 2017 8 30 00 76.759731 122.371816  
1 1 2017 8 35 00 75.796072 123.011494  
1 1 2017 8 40 00 74.838956 123.665132  
1 1 2017 8 45 00 73.888755 124.333179  
1 1 2017 8 50 00 72.945832 125.016092  
1 1 2017 8 55 00 72.010551 125.714342  
1 1 2017 9 00 00 71.083276 126.428408  

使用awk:

awk '$4!=7 || $5>=30 {print}' file

輸出:

1 1 2017 7 30 00 88.574990 115.637504  
1 1 2017 7 35 00 87.614221 116.140360  
1 1 2017 7 40 00 86.633495 116.652701  
1 1 2017 7 45 00 85.642547 117.174839  
1 1 2017 7 50 00 84.647055 117.707097  
1 1 2017 7 55 00 83.650410 118.249809  
1 1 2017 8 00 00 82.654745 118.803319  
1 1 2017 8 05 00 81.661486 119.367982  
1 1 2017 8 10 00 80.671646 119.944164  
1 1 2017 8 15 00 79.685987 120.532243  
1 1 2017 8 20 00 78.705118 121.132609  
1 1 2017 8 25 00 77.729550 121.745662  
1 1 2017 8 30 00 76.759731 122.371816  
1 1 2017 8 35 00 75.796072 123.011494  
1 1 2017 8 40 00 74.838956 123.665132  
1 1 2017 8 45 00 73.888755 124.333179  
1 1 2017 8 50 00 72.945832 125.016092  
1 1 2017 8 55 00 72.010551 125.714342  
1 1 2017 9 00 00 71.083276 126.428408

解決方案1:如果要打印第5列小於30且第4列不等於7的行,則以下方法可能會有所幫助。

awk '$4!=7 && $5<30'  Input_file

解決方案2:如果要打印第5列大於30的行,第4列不等於7,那么以下步驟可能會有所幫助。

awk '$4!=7 && $5>30'  Input_file

也許更簡潔的awk

刪除字段4等於7 字段5小於30的行

$ awk '!($4==7 && $5<30)' case_file_48485025

產量

1 1 2017 7 30 00 88.574990 115.637504  
1 1 2017 7 35 00 87.614221 116.140360  
1 1 2017 7 40 00 86.633495 116.652701  
1 1 2017 7 45 00 85.642547 117.174839  
1 1 2017 7 50 00 84.647055 117.707097  
1 1 2017 7 55 00 83.650410 118.249809  
1 1 2017 8 00 00 82.654745 118.803319  
1 1 2017 8 05 00 81.661486 119.367982  
1 1 2017 8 10 00 80.671646 119.944164  
.
.

這個怎么運作

  • 默認情況下,如果awk命令看到非零值,則會打印一行
  • !($4==7 && $5<30)在滿足您的條件時將評估為零,因此awk無法打印。

這可能對您有用(GNU sed):

sed '/^.........7.[0-2]/d' file

刪除在第4列中具有7在第5列中的第一個字符為02的行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM