2012-03-01 94 views
3

我很好奇,如果可以不僅檢索使用awk的隔離字段,還可以檢索包含多個相鄰字段的原始字符串的一部分,封閉的分隔符?awk:以字符串形式在分隔符之間獲得幾個字段

例如,在

foo.bar.baz.test 

用awk當與'.'分隔符,並告訴awk來提取場2和3,我希望能夠自動檢索

bar.baz 

。我知道我以後可以手工重新構建字符串的一部分,但那不太合適。

想法?

+0

你的意思是說你覺得這個'$ 2 OFS $ 3'不對嗎?你正在尋找一個awk內置函數/無論它實現它? – Kent 2012-03-01 17:54:49

+0

嗯,我甚至不知道$ 2 OFS $ 3是什麼意思:)這就是爲什麼我問。 – iksemyonov 2012-03-01 17:57:39

回答

2

我不是很肯定,如果這是你想要什麼:

kent$ echo "foo.bar.baz.test"|awk 'BEGIN{FS=OFS="."}{print $2,$3}' 
bar.baz 

編輯

我需要將其推廣到未知數量的字段(沒有硬編碼 $ 2,$ 3 ,但所有以$ 2開頭的東西直到最後 - 是 可能?)

看到下面的測試:

kent$ echo "a.b.c.d.e.f.g.h.j.foo.bar"|awk 'BEGIN{FS=OFS="."}{for(i=2;i<=NF;i++)s=i==NF?s $i:s $i OFS;print s}' 
b.c.d.e.f.g.h.j.foo.bar 
+0

好的,所以我需要了解這個OFS構造。謝謝你的提示! 此外,我需要將其推廣到未知數量的字段(不要硬編碼$ 2,$ 3,但所有以2美元開頭直到結尾的東西 - 這可能嗎?) – iksemyonov 2012-03-01 18:01:51

+0

@SemenSemenych請參閱我的答案中的編輯 – Kent 2012-03-01 18:15:40

2

這可能會爲你工作:

echo foo.bar.baz.test | awk -F. -vOFS=. '{print $2,$3}' 
bar.baz 

在打印指令的,是輸出字段分隔符(OFS)的簡寫。

+0

你有一個錯字嗎? -vOFS =。一個缺失的空間可能? – iksemyonov 2012-03-01 18:01:31

+0

'-vOFS = .'適用於我,但如果你喜歡'-v OFS = .' – potong 2012-03-01 18:09:07

相關問題