根据文件中的输入将文本添加到行的开头

时间:2014-02-26 23:42:30

标签: linux bash sed awk tr

嗨,我有一个困难(至少对我来说)的任务。我需要做以下事情:

这是我的输入

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

根本不确定如何做到这一点。我确实控制了如何在outpute文件中注入主机名(例如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

有人可以帮我吗?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

答案 2 :(得分: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
...

对每一行执行以下操作:

如果该行以host开头(如果它匹配//正则表达式,^ host is:^ starts with,host),则将第一个字段($ 1)分配给变量&#34; host&#34;

如果字段数大于1(NF> 1),则打印变量主机和行($ 0)

答案 3 :(得分:0)

bash中的

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

答案 4 :(得分:0)

这可能适合你(GNU sed):

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

将主机名保存在保留空间中,并将其添加到非主机名行