문제

안녕하세요, 나는 어렵습니다 (적어도 나를 위해) 작업을 수행합니다.다음을 수행해야합니다.

여기 내 입력

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 파일에 호스트 이름 (예제 호스트 호스트 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
.

그러나 나는 여전히 결과를 필요로합니다.고유 한 식별자를 추가하면 도움이됩니다.메커션 파일이 끝난 후 나중에 제거 할 수 있습니다.예제 파일에서 모든 "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
...
.

각 행에 대해 다음을 수행합니다.

라인이 호스트로 시작하면 (정규 표현식과 일치하는 경우 : ^ 호스트는 호스트로 시작합니다), 첫 번째 필드 ($ 1)를 변수 "호스트"

에 할당하십시오.

필드 수가 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
.

HOLD SPACE에 호스트 이름을 저장하고이를 비 호스트 이름 행에 미리 추가하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top