2012-06-23 73 views
1

可以split(string, array, separator)awk使用空格序列作爲分隔符(或更一般地說任何正則表達式作爲分隔符)?awk按空白序列分割

顯然,人們可以使用內部自動分割(在輸入的每一行上運行,值爲FS變量作爲分隔符),並使用簡單的for$0魔術。不過,我只是想知道是否有更簡單的方法使用split本身。

+1

你能告訴我們你要完成什麼任務,並提供一些輸入/輸出樣本。可能會有拆分的替代方案。 – Levon

回答

2

The GNU Awk User's Guide狀態:

split(string, array, fieldsep) 

這就將字符串轉換成由fieldsep分離件,並且存儲在數組中的 件。第一部分存儲在數組[1]中,第二部分 存儲在數組[2]中,等等。第三個參數的字符串值,fieldsep,是一個正則表達式,描述了拆分字符串的位置(很多 ,因爲FS可以是描述拆分輸入記錄的位置的正則表達式)。如果 省略了fieldsep,則使用FS的值。分割返回創建的元素數 。分割功能,那麼,分割字符串 成碎片的方式類似於輸入線被分成 字段

下面是一個使用一個簡單的正則表達式短(有點傻)示例的方式".s "那將匹配任何單個字符,後跟一個小寫s和一個空格。分割的結果被放入數組a。請注意,匹配的部分是而不是放置在陣列中。

BEGIN { 
    s = "this isn't a string yes isodore?" 
    count = split(s, a, ".s ") 
    printf("number of splits: %d\n", count) 

    print "Contents of array:" 
    for (i = 1; i <= count; i++) 
    printf "a[%d]: %s\n", i, a[i] 
} 

輸出:

$ awk -f so.awk 

number of splits: 3 
Contents of array: 
a[1]: th 
a[2]: isn't a string y 
a[3]: isodore? 

的製品Advanced Awk for Sysadmins顯示解析使用split()的線的例子。該page包含使用正則表達式將數據拆分爲數組的示例。

2

從GNU AWK(1)手冊頁:

split(s, a [, r]) 

拆分字符串s插入正則表達式r處的陣列的,並返回字段的數量。如果r省略,則使用FS。

這裏的重點是,你可以使用任何正則表達式來執行字段拆分 - 至少你可以用gawk。如果你使用其他的東西,你需要檢查你的文檔。

+0

'man'頁面的GNU擴展部分僅引用空字符串來分割單個字符。通常使用正則表達式'FS'和'split()'不是擴展名。 –