簡體   English   中英

使用 awk 在某列刪除具有特定值的行時出現問題

[英]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 行中的一些。

data.anno 文件的一些行

使用 awk 后仍存在於輸出文件中的包含“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.

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