2014-02-26 25 views
1

嗨,我有一個困難的(至少對我來說)任務要做。我需要做到以下幾點:基於文件中的輸入添加文本到行的開始

這裏是我的輸入

host1 
atetley 170.198.19.165 91 18 6 4198 
NJPYNYFWD01 170.198.82.143 257 14 6 4749 
NJTTKLFWD01 170.198.82.142 257 13 6 3993 
host2 
dfriel 198.177.151.69 91 14 6 2023 
host3 
dfriel 198.177.151.69 91 14 6 2023 
fklotz 198.177.151.81 91 15 6 1829 
ganthos 198.177.151.92 91 20 6 791 

我需要下面的輸出

host1 atetley 170.198.19.165 91 18 6 4198 
host1 NJPYNYFWD01 170.198.82.143 257 14 6 4749 
host1 NJTTKLFWD01 170.198.82.142 257 13 6 3993 
host2 dfriel 198.177.151.69 91 14 6 2023 
host3 dfriel 198.177.151.69 91 14 6 2023 
host3 fklotz 198.177.151.81 91 15 6 1829 
host3 ganthos 198.177.151.92 91 20 6 791 

不知道如何做到這一點的。我確實可以控制如何在輸出文件中注入主機名(例如host1 host host3)。所以我可以說在每個主機之前加上一個唯一的標識符,比如「uuu」

uuuhost1 
atetley 170.198.19.165 91 18 6 4198 
NJPYNYFWD01 170.198.82.143 257 14 6 4749 
NJTTKLFWD01 170.198.82.142 257 13 6 3993 
UUUhost2 
dfriel 198.177.151.69 91 14 6 2023 
UUUhost3 
dfriel 198.177.151.69 91 14 6 2023 
fklotz 198.177.151.81 91 15 6 1829 
ganthos 198.177.151.92 91 20 6 791 

但是我仍然需要這樣的結果。如果添加唯一標識符有幫助。我可以在文件mainpulation結束後將其剝離。示例將所有「UUU」移出文件

host1 atetley 170.198.19.165 91 18 6 4198 
host1 NJPYNYFWD01 170.198.82.143 257 14 6 4749 
host1 NJTTKLFWD01 170.198.82.142 257 13 6 3993 
host2 dfriel 198.177.151.69 91 14 6 2023 
host3 dfriel 198.177.151.69 91 14 6 2023 
host3 fklotz 198.177.151.81 91 15 6 1829 
host3 ganthos 198.177.151.92 91 20 6 791 

任何人都可以幫助我解決這個問題嗎?

回答

1

您可以用awk打印:

awk 'NF==1{h=$1;next} {print h, $0}' file 
host1 atetley 170.198.19.165 91 18 6 4198 
host1 NJPYNYFWD01 170.198.82.143 257 14 6 4749 
host1 NJTTKLFWD01 170.198.82.142 257 13 6 3993 
host2 dfriel 198.177.151.69 91 14 6 2023 
host3 dfriel 198.177.151.69 91 14 6 2023 
host3 fklotz 198.177.151.81 91 15 6 1829 
host3 ganthos 198.177.151.92 91 20 6 791 
+0

uuuur .....在6秒鐘內擊敗我.... +1 – Kent

+0

lol :)謝謝你的回答也是正確的,所以+ 1 – anubhava

+0

對不起,邏輯如下:基本上我貓的文件,然後我必須告訴它找到第一個主機名(host1)。一旦找到它,那麼它必須將host1添加到在它之後以及在找到下一個主機名「host2」之前的任意數量的行。我不認爲一個簡單的awk命令實現了這一點? – theuniverseisflat

1
awk 'NF==1{p=$1;next}$0=p FS$0' file 
+0

嗨,肯特。我不知道這個邏輯適用於我需要做的事情。主機名(host1 host2 host3)可以是任何東西,無論順序如何,它從哪裏獲得$ 1的名稱。邏輯必須在文件內部找到主機名。他們沒有任何特定的順序 – theuniverseisflat

+1

@theuniverseisflat define'可以是任何東西 – Kent

+0

嗨主機名稱可以是任何名稱和任何長度,這就是我的意思 – theuniverseisflat

0

這裏是我的嘗試:

awk '/^host/ {host=$1} NF>1{print host, $0}' <myfile 

含MYFILE

host1 
atetley 170.198.19.165 91 18 6 4198 
NJPYNYFWD01 170.198.82.143 257 14 6 4749 
... 

它下面,每個行:

如果線路與主機開始(如果它//正則表達式,^主機存在匹配:^開頭,主機),將第一個字段($ 1)的變量「宿主」

如果場的數量大於1(NF> 1),打印變量主機,線($ 0)

0
在bash

while read FIRST REST 
do 
    [ ${FIRST:0:4} = "host" ] && HOST="$FIRST" || echo "$HOST $FIRST $REST" 
done <inputfile 
0

這可能會爲你工作(GNU SED):

sed -r '/^\S+$/{h;d};G;s/(.*)\n(.*)/\2 \1/' file 

將主機名保存在保留空間中,並將其添加到非主機名行

相關問題