2016-11-08 119 views
0

我正在嘗試使用包含製表符作爲分隔符的數據集,但最後一列有一個用戶可以輸入自定義文本(包括製表符)的自定義字段。現在,我嘗試使用AWK用條件替換最後一列中的製表符

awk "/\t/{c++;if(c==7){sub(\"\t\",\"\");c=0}}1" users10000.csv >users10000awk.csv 

刪除這些標籤,但它好像有第6和第7列之間沒有分隔符是第7個是空的。

只什麼我現在想要做的是更換月7日以後發現的標籤,如果最後一個字段是不是通過

awk /\t/{c++;if((c==7) && ($12!=\"\")){sub(\"\t\",\"\");c=0;}}1 usersorig.csv >usersorigawk.csv 

空的,但是這會導致錯誤

){sub(\"\t\" was unexpected at this time. 

我對AWK來說是全新的,並且希望能夠輕鬆地工作,但格式化是一個習慣的痛苦。你有什麼可以幫忙的嗎?

樣品輸入:

100008949 esttrellitta 264 44 6853 0 28 Dec 2009 18:01:42 GMT El Paso,Tx. 
100009841 ChelseaBex 152 50 394 0 28 Dec 2009 18:05:43 GMT  
100012792 ErinPattisonn 984 666 5003 0 28 Dec 2009 18:19:39 GMT under your bed. 
100013967 TUBeautifulRosa 323 251 1269 0 28 Dec 2009 18:24:51 GMT on Twitter ....... ahaahaa ! 
100014135 GeenaJohnson 144 130 9789 0 28 Dec 2009 18:25:37 GMT Arkansas 
100015928 GooSau 93 286 8075 0 28 Dec 2009 18:33:59 GMT  
10001882 rjwilson 1 340 6358 0 6 Nov 2007 15:54:47 GMT iPhone: 39.053871, 95.674576 
100019750 HovMinajJackson 135 136 6022 0 28 Dec 2009 18:51:29 GMT neverland 
100020433 MattieBX 131 97 2610 0 28 Dec 2009 18:54:40 GMT zundert 
100024321 KatieStepek 64 93 503 0 28 Dec 2009 19:13:08 GMT Hamilton 
137179909 LaLovesU 431 499 19568 0 26 Apr 2010 01:45:05 GMT Oakland,\ CA 

最後一行是我想要編輯的元兇之一。

+2

添加樣品輸入和輸出清晰,以及其他人測試其解決方案 – Sundeep

+1

我的不好!用一個例子和手頭的問題編輯。 – user3394131

+0

請注意,您可以使用'$ NF'來引用最後一個字段。 – fedorqui

回答

0

awk解決方案。我假定該選項卡是您所給示例中的字段分隔符。如果分隔符可以是選項卡或空格,那麼您將不得不使用awk split函數。

awk -F'\t' '{ 
    for (i=1; i < NF; i++) {  # iterator and print 
     if (i < 7) { 
      printf("%s ", $i) # for <7 column, print space as separator 
     } else { 
      printf("%s\t", $i) # for 7+ column, print as it is with tab 
     } 
    } 
    print ""      # print new line - record separator 
}' 

一號線的解決方案:

awk -F'\t' '{for (i=1; i < NF; i++) { if (i < 7) { printf("%s ", $i) } else { printf("%s\t", $i)} }print ""}' 
1

或許這就是你想要什麼?

$ seq 10 | paste -sd'\t' 

1  2  3  4  5  6  7  8  9  10 

$ seq 10 | paste -sd'\t' | sed 's/\t/ /7g' 

1  2  3  4  5  6  7 8 9 10 

我認爲只有gnu-sed支持這個。還要注意,d'\t'已經是默認的,但只是強調,我們正在使用的標籤

UPDATE

要通過行就製表符分隔的文件排這項工作

$ sed 's/\t/ /7g' input.file > output.file 
+0

我安裝了Linux來嘗試使用它,因爲它看起來像我所需要的,現在我正在嘗試使用輸入文件而不是seq 10,我該怎麼做?我正在嘗試 'paste -sd'\ t'| sed的/ \ t// 7g'inputfile.txt> outputfile.txt' 但它不起作用,該命令並不完整 – user3394131

相關問題