[英]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列中的第一個字符為0
到2
的行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.