2017-03-09 38 views
1

Im對AWK來說是全新的。我試圖從一個製表符分隔的文件中的空格(從下面這個愚蠢的例子中的$ 1開始)中刪除所有內容,或者在第一個空格之前抓取所有內容並將其放入awk中的變量(相同)。所以例如我有線條狀awk模式:刪除空格後的所有內容(包括)在一個字段中

abc 0000 12sometext stuff 

如何刪除' 0000'(後在$ 1中第一個空間可以是任何長度,唯一的規則就是一切),並以$ 1最終被abc。子類似的功能不在AWK中,但是我可以使用正則表達式嗎?

如果我需要將結果abc分配給一個變量,使用函數split(在AWK中)的數組看起來並不理想,那麼沒有其他方法嗎?

awk -F'\t' '{n = split($1, array, " "); result = array[1]; print result}' file.txt 
+1

WRT'子樣功能在AWK' - 當然AWK有子()函數。獲取Arnold Robbins編寫的「有效的Awk編程」第4版。 –

+0

我明白了!但我想要'awk -F'\ t''{name = gensub(/。+ /,「」,$ 1);打印名稱}'file.txt'我不認識這個函數有返回的值。 – user3375672

+1

有十幾種不同的方式。假設$ 0'ABC 0000'那麼你可以做任何的:'VAR = SUBSTR($ 0,1,3)','VAR = SUBSTR($ 0.1,指數($ 0,」「)-1)','匹配($ 0,/ /){風險= SUBSTR($ 0,1,RSTART-1)}','VAR = gensub(/ * /, 「」,1,$ 0)','VAR = $ 0; sub(/。* /,「」,var)','split($ 0,t,/ /); var = t [1]'等等,等等...... –

回答

2

您可以使用sub替換$1空間後一切:

awk 'BEGIN{FS=OFS="\t"} {sub(/ .+/, "", $1)} 1' file 

abc 12sometext stuff 
+0

你能否在子語句之後解釋'1'?以及如何分配剩餘的部分'abc'to變量(做在awk程序的東西)又名'SHORT_NAME =子(/ + /, 「」,$ 1)'。 – user3375672

+1

'1'是'awk'中的默認動作,以便我們打印記錄。到替換值賦值給一個變量的使用:'AWK「BEGIN {FS = OFS = 「\ t」 的} {P = $ 1; sub(/。+ /,「」,p)} 1'文件' – anubhava

+1

聰明!我知道了。 – user3375672

相關問題