2014-03-03 12 views
1

我們有一個要求,在那裏我們的文本文件的內容是這樣的添加:從線採取的最後一個字,並在一開始使用bash

[some-section-1] 
big_msg_line1 var=random_value1 
big_msg_line2 var=random_value2 
big_msg_line3 var=random_value3 

[some-section-2] 
"lots of irrelevant data" 

[some-section-3] 
"lots of irrelevant data" 

[some-section-4] 
big_msg_line4 var=random_value4 
big_msg_line5 var=random_value5 
big_msg_line6 var=random_value6 
big_msg_line7 var=random_value7 
big_msg_line8 var=random_value8 

[some-section-5] 
"lots of irrelevant data" 

所有我們想要修改與共同啓動線charaters,就像在這個例子中,我們想修改啓動字「大」的所有行。我們想將其更改爲如下所示:

[some-section-1] 
random_value1 msg=big_msg_line1 
random_value2 msg=big_msg_line2 
random_value3 msg=big_msg_line3 

[some-section-2] 
"lots of irrelevant data" 

[some-section-3] 
"lots of irrelevant data" 

[some-section-4] 
random_value4 msg=big_msg_line4 
random_value5 msg=big_msg_line5 
random_value6 msg=big_msg_line6 
random_value7 msg=big_msg_line7 
random_value8 msg=big_msg_line8 

[some-section-5] 
"lots of irrelevant data" 

這些僅作爲示例。原始文件包含比這些更多的數據。如果不在數千行中,則爲數百。

我目前做這個使用一個循環,讀取每一行,切割值,格式化他們像我所希望的方式,在不同的文件中,然後放入,然後替換爲新文件中的原始文件。有沒有一種方法可以使用一些內襯來實現這一點?這真的很有幫助。希望我清楚我的問題。

在此先感謝。

+0

不要*所有*的行以'big'或只是那些你想修改? – pfnuesel

+0

只是我想修改的人。編輯了這個問題。 – Abhinav

回答

3

從我瞭解的信,這AWK一個班輪將完成這項工作:

cat a 
[some-section-1] 
big_msg_line1 var=random_value1 
big_msg_line2 var=random_value2 
big_msg_line3 var=random_value3 

[some-section-2] 
lots of irrelevant data 

[some-section-3] 
lots of irrelevant data 

[some-section-4] 
big_msg_line4 var=random_value4 
big_msg_line5 var=random_value5 
big_msg_line6 var=random_value6 
big_msg_line7 var=random_value7 
big_msg_line8 var=random_value8 

[some-section-5] 
lots of irrelevant data 

此:

awk '{FS="var="; if ($1~/big/) { print $2"\tmsg="$1} else {print }}' a 

給人

[some-section-1] 
random_value1 msg=big_msg_line1 
random_value2 msg=big_msg_line2 
random_value3 msg=big_msg_line3 

[some-section-2] 
lots of irrelevant data 

[some-section-3] 
lots of irrelevant data 

[some-section-4] 
random_value4 msg=big_msg_line4 
random_value5 msg=big_msg_line5 
random_value6 msg=big_msg_line6 
random_value7 msg=big_msg_line7 
random_value8 msg=big_msg_line8 

[some-section-5] 
lots of irrelevant data 
+0

哇。這一個也適用。之前沒有看到這個答案。不知道現在選哪一個。對我而言,兩者都在起作用。非常感謝jeanrjc。高超。幾分鐘後,甚至不知道如何快速執行此操作。現在我有2個。 :)。再次感謝。 – Abhinav

+0

@Biker我個人會使用'awk'答案。在我看來,它比'sed'選項更清潔。 –

+0

好的。大。感謝Mojoo。無論是複雜的seds還是複雜的awk,我都不太好。所以不確定哪一個更好。然而,根據您的建議,我會將jeanrjc標記爲答案。再次感謝。非常感謝。我喜歡這個在線社區。 :) – Abhinav

2

這個命令應該做的工作

sed -e 's/\(big[^ ]*\)\([ ]*\)var=\([^ ]*\)/\3\2msg=\1/' [your file] > [output file] 

編輯:您可能需要將slahes(/)更改爲未在文件中使用

+0

我的天啊。這正是我所期待的。該文件沒有任何/在其中。所以我被覆蓋了。謝謝你,謝謝 – Abhinav

相關問題