호스트 파일에 관한 내용입니다.
입력하다:
1.2.3.4 foooo00001 foo001 # AIX bar0003 NOSLS NOSLS NOCOMMENT
2.3.4.1 foooo00002 foo002 fooo0002 # Linux bar0003 NOSLS NOSLS NOCOMMENT
산출:
echo "$INPUT" | awk '{print $(NF-3)";"$2";"$1";"$(NF-2)";"$(NF-1)}'
bar0003;foooo00001;1.2.3.4;NOSLS;NOSLS
bar0003;foooo00002;2.3.4.1;NOSLS;NOSLS
하지만 우리에게는 다음과 같은 출력이 필요합니다.
echo "$INPUT" | awk SOMEMAGIC
bar0003;foooo00001;1.2.3.4;NOSLS;NOSLS;foo001
bar0003;foooo00002;2.3.4.1;NOSLS;NOSLS;foo002;fooo0002
질문:별칭을 추가하기 위해 awk를 어떻게 수정합니까(숫자는 다를 수 있으며 호스트에는 0, 1, 2 등의 별칭이 있을 수 있음)?
공백은 구분 기호이며 별칭은 호스트 이름 뒤에 오고 항상 "#"으로 끝납니다.
답변1
마음에 든다면 awk
시도해 보세요
echo "$INPUT" | \
awk -v OFS=';' '
{for(i=4;$i!="#";i++)
$3=$3 OFS $i
print $(NF-3),$2,$1,$(NF-2),$(NF-1),$3}'
GNU에서도 같은 일을 할 수 있습니다sed
echo "$INPUT" | \
sed -r 's/(\S*)( \S* )(.*) # \S* (\S*)( .* )\S*/\4\2\1\5\3/;s/ /;/g'
답변2
다음을 시도해 볼 수 있습니다.
echo "$INPUT" | awk '{ for (i = 1; i < NF; i++) { if ($i ~ /#/) { pos = i; break; } } } { for (i = 3; i < pos; i++) s = s";"$i; print $(NF-3)";"$2";"$1";"$(NF-2)";"$(NF-1)s }'