嗨,我有一个困难(至少对我来说)的任务。我需要做以下事情:
这是我的输入
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
有人可以帮我吗?
答案 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
包含
的myfilehost1
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)
:
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
将主机名保存在保留空间中,并将其添加到非主机名行