![](/img/trans.png)
[英]Splitting a column into two columns base on a separator in csv file using 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.