我很好奇,如果可以不僅檢索使用awk的隔離字段,還可以檢索包含多個相鄰字段的原始字符串的一部分,封閉的分隔符?awk:以字符串形式在分隔符之間獲得幾個字段
例如,在
foo.bar.baz.test
用awk當與'.'
分隔符,並告訴awk來提取場2和3,我希望能夠自動檢索
bar.baz
。我知道我以後可以手工重新構建字符串的一部分,但那不太合適。
想法?
我很好奇,如果可以不僅檢索使用awk的隔離字段,還可以檢索包含多個相鄰字段的原始字符串的一部分,封閉的分隔符?awk:以字符串形式在分隔符之間獲得幾個字段
例如,在
foo.bar.baz.test
用awk當與'.'
分隔符,並告訴awk來提取場2和3,我希望能夠自動檢索
bar.baz
。我知道我以後可以手工重新構建字符串的一部分,但那不太合適。
想法?
我不是很肯定,如果這是你想要什麼:
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
好的,所以我需要了解這個OFS構造。謝謝你的提示! 此外,我需要將其推廣到未知數量的字段(不要硬編碼$ 2,$ 3,但所有以2美元開頭直到結尾的東西 - 這可能嗎?) – iksemyonov 2012-03-01 18:01:51
@SemenSemenych請參閱我的答案中的編輯 – Kent 2012-03-01 18:15:40
這可能會爲你工作:
echo foo.bar.baz.test | awk -F. -vOFS=. '{print $2,$3}'
bar.baz
在打印指令的,
是輸出字段分隔符(OFS)的簡寫。
你有一個錯字嗎? -vOFS =。一個缺失的空間可能? – iksemyonov 2012-03-01 18:01:31
'-vOFS = .'適用於我,但如果你喜歡'-v OFS = .' – potong 2012-03-01 18:09:07
你的意思是說你覺得這個'$ 2 OFS $ 3'不對嗎?你正在尋找一個awk內置函數/無論它實現它? – Kent 2012-03-01 17:54:49
嗯,我甚至不知道$ 2 OFS $ 3是什麼意思:)這就是爲什麼我問。 – iksemyonov 2012-03-01 17:57:39