質問

こんにちは私は(少なくとも私にとって)やるべき仕事をしています。私は次のことが必要です:

これは私の入力

です
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ホスト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
.

誰もが私を助けてくれることができますか?

役に立ちましたか?

解決

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
.

他のヒント

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

これは私の試みです:

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 oft ^ starts、host)、最初のフィールド($ 1)を変数 "host"

に割り当てます。

フィールド数が1より大きい場合(NF> 1)、変数ホストと回線($ 0)

を印刷します。

bash:

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

これはあなたのために働くかもしれません(GNU SED):

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

ホスト名を保持スペースに保存し、それを非ホスト名行に先頭に追加します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top