簡體   English   中英

使用AWK將文件的第一列分成多列

[英]Splitting the first column of a file in multiple columns using AWK

文件看起來像這樣,但是有數百萬行(分隔TAB ):

1_number_column_ranking_+   100 200 Target "Hello" 

我想用_分隔第一列,因此它變為:

1 number column ranking + 100 200 Target "Hello"

這是我一直在嘗試的代碼:

awk -F"\t" '{n=split($1,a,"_");for (i=1;i<=n;i++) print $1"\t"a[i]}' 

但這不是我所需要的。
感謝您的幫助(有關本主題的其他主題對我沒有幫助)。

無需拆分,只需替換即可:

awk 'BEGIN{FS=OFS="\t"}{gsub("_","\t",$1)}1'

例如:

$ cat file
1_number_column_ranking_+       100     200     Target "Hello"

$ awk 'BEGIN{FS=OFS="\t"}{gsub("_","\t",$1)}1' file
1       number  column  ranking +       100     200     Target "Hello"

gsub將替換所有出現的事件,當未給出第三個參數時,它將替換為$ 0。
最后1{print}的快捷方式。 (始終為true ,暗示{print} 。)

如果“ _”僅出現在第一列中,則為另一個awk。 用正則表達式“ [_ \\ t] +”拆分輸入字段,然后在主節中執行類似$ 1 = $ 1的虛擬操​​作,以便使用OFS =“ \\ t”重構$ 0

$ cat steveman.txt
1_number_column_ranking_+       100     200i    Target  "Hello"

$ awk -F"[_\t]" ' BEGIN { OFS="\t"} { $1=$1; print } ' steveman.txt
1       number  column  ranking +       100     200i    Target  "Hello"

$

感謝@Ed,將其從-F"[_\\t]+"-F"[_\\t]" ,可以避免串聯空字段。

暫無
暫無

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

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