2016-12-16 47 views
-1

第5列和第17列中的字段合併在一起,我想拆分合並的字段並將其放入單獨的字段中。 我的數據是這樣的我想分裂由tab使用awk窗口分隔合併的字段?

326502010-12-10  320100807 
368902010-12-14  420100716 

,但我想看到這樣

32650  2010-12-10 3 20100807 
36890  2010-12-14 4 20100716 
+0

第5列和第17列?你可能意味着字符5和17. – fedorqui

回答

0
更好

使用sed通過字符分割:

$ sed -r 's/^(.{5})(.{18})/\1\t\2\t/' file 
32650 2010-12-10  3 20100807 
36890 2010-12-14  4 20100716 

這抓住給定的字符並將它們打印回到他們之間的一個標籤。

+0

但我使用awk。我期待着使用awk – Alula

+2

獲得解決方案,然後開始發佈您的嘗試。而且,這個sed代碼很容易翻譯成awk。 – fedorqui

0

您還可以使用cut此:

$ cut --output-delimiter=$'\t' -c 1-5,6-17,18- file 
32650 2010-12-10  3 20100807 
36890 2010-12-14  4 20100716 

隨着-c選項中可以設置表示要剪線的部分名單。逗號,被設置爲選項卡的--output-delimiter替代。

1

使用awk

$ awk -vOFS="\t" '{sub(/.{5}/, "&\t", $1); sub(/./, "&\t", $2)}1' file 
32650 2010-12-10 3 20100807 
36890 2010-12-14 4 20100716 

  • sub(/.{5}/, "&\t", $1)替代前5個字符與本身隨後\t上的第一個字段。

  • sub(/./, "&\t", $2)}替代第二個字段。

  • 1這個結果總是爲真,awk打印輸入行爲默認行爲。

+0

它的工作原理。非常感謝你!! – Alula

+0

@Alula歡迎您:) – nu11p01n73R

+0

嗨腳本很好地工作,但對我的一些領域扭曲。如何在分割字段後避免扭曲的字段?是否有可能修復該領域?謝謝 – Alula

1

在前述情況下的日期數的長度變化,使用:

$ awk '{sub(/....-..-../,"\t&",$1); sub(/^./,"&\t",$2)} 1' file 
32650 2010-12-10 3 20100807 
36890 2010-12-14 4 20100716 

sub用製表(\t)和匹配部分(&),即取代的日期部分。日期。關於$2與後者大致相同。