簡體   English   中英

awk:刪除每個字段之間的多個制表符並輸出一行,其中每個字段由單個制表符分隔

[英]awk: remove multiple tabs between each fields and output a line where each field is separated by a single tab

我有一個文件,它的第 11 行理論上應該有 1011 列,但它的每個字段之間似乎有 1 個以上的選項卡。 更具體地說,如果我使用

awk '{print NF}' file

然后我可以看到第 11 行與所有其他行的字段數相同(除了前十行,它們具有不同的格式。這是預期的)。 但如果我使用

awk 'BEGIN{FS="\t"} {print NF}' file

我可以看到第 11 行有 2001 個字段。 基於這一點,我懷疑它的某些字段被多個空格分隔。 我想讓每個字段只用 1 個標簽分隔,所以我試過了

awk 'BEGIN{OFS="\t"} {print}' file > file.modified

但是,這並不能解決問題,因為

awk 'BEGIN{FS="\t"} {print NF}' file.modified 

仍然表示第 11 行有 2001 個字段。 任何人都可以指出實現我的目標的方法嗎? 非常感謝! 我已將文件的前 100 行放在以下谷歌驅動器鏈接中。 https://drive.google.com/file/d/1qOjzjUnJKJpc4VpDxwKPBcqMS7MUuyKy/view?usp=sharing

要將多個標簽壓縮到一個標簽,您可以使用tr

tr -s '\t' <file >file.modified

這可能對 GNU awk 有幫助:

awk 'BEGIN{FS="\t+"; OFS="\t"} {$1=$1; print}' file

請參閱: 8 個強大的 Awk 內置變量——FS、OFS、RS、ORS、NR、NF、FILENAME、FNR

暫無
暫無

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

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