[英]Problems using awk to delete a row with a specific value at a certain column
我有一個 data.anno 文件,由 6677 行和 33 列組成。 例如,在第一張圖片中,您可以看到 data.anno 文件的一些行。
2953 行在第 10 列中包含“現在”。 我想獲得一個像原始文件一樣的新文件,但在第 10 列中沒有包含“present”的行。 我試過這個:
awk '$10!="present"' data.anno >> data_output.anno
但我遇到了一個問題:我獲得的output文件在第3列中仍然包含兩行帶有“present”的行,而在第10列中包含“present”的其他2951行已經正確消失。 你知道為什么會這樣嗎? 你認為有更好的方法來獲取我需要的 output 文件嗎?
在第二張圖片中,您可以看到使用 awk 后 output 文件中仍然存在的包含“present”的兩行。 在第三張圖片中,您可以看到使用 awk 后正確消失的包含“present”的 2951 行中的一些。
您的真實輸入文件(第 13 列中包含國家/地區)是制表符分隔的,並且某些字段包含空格,因此您需要將 FS 設置為制表符:
awk -F'\t' '$13 != "Italy" file
否則,在 $13 之前的字段包含空格的行將被視為多個字段,然后意大利將不在第 13 個字段中,而是在第 14 個或更晚的字段中。
這是使用具有制表符分隔字段的更具代表性的示例輸入文件所發生的事情( cat -T
只是為了使制表符可見):
$ cat file
ID DAY LOCALITY OTHER
1 the weekend Italy stuff
2 mon England stuff
3 wed Italy stuff
4 the weekend Italy stuff
5 sun England stuff
6 thu Italy stuff
$ cat -T file
ID^IDAY^ILOCALITY^IOTHER
1^Ithe weekend^IItaly^Istuff
2^Imon^IEngland^Istuff
3^Iwed^IItaly^Istuff
4^Ithe weekend^IItaly^Istuff
5^Isun^IEngland^Istuff
6^Ithu^IItaly^Istuff
$ awk '$3!="Italy"' file
ID DAY LOCALITY OTHER
1 the weekend Italy stuff
2 mon England stuff
4 the weekend Italy stuff
5 sun England stuff
$ awk -F'\t' '$3!="Italy"' file
ID DAY LOCALITY OTHER
2 mon England stuff
5 sun England stuff
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.