필자는 AWK를 사용하여 여러 개의 디렉토리에서 특정 파일을 검색하고 필요한 정보를 출력하는 두 가지 기능을 각각 가지고 있습니다. 두 함수 모두 FILENAME과 필자가 필요로하는 특정 필드를 인쇄하고 스스로 잘 작동합니다. 보다 견고한 출력을 위해 함께 결합하고 싶습니다.한 줄에 여러 awk 출력을 결합하여 출력합니다.
저는 프로그래머가 아닙니다. 내가 갔을 때 나는 awk에 대해 읽는 동안 이것들을 썼다.
기능 1
cver() {
X=""
case $1 in
("-b") X="bb";;
("-c") X="cpe";;
("-e") X="etech";;
("-k") X="core";;
("-o") X="ohgov";;
("-h"|help) echo "'cver' allows us to see the software version
running on all Company Juniper devices.\n'cver' is especially helpful
in determining which devices require a software upgrade.\n\nOptions
are -b for bb, -c for cpe, -e for etech, -k for core, and -o for
ohgov.\n\nUse grep to find specific information. Ex: cver -c | grep
name";;
(*) echo "Unrecognized or incomplete command.\nUse -h for help.";;
esac
[ $X ] && awk -vSRCH="$3" '/JUNOS/ && /boot/ && $5 ~ "^[[]" SRCH
{sub ("/show.version", "", FILENAME); sub (".*/", "", FILENAME);
print $5 " " FILENAME}' ~/svn/nw_config_data/*${X}.domain.net/show.version | sort
}
입력/출력 예 :
% cver -k <---input
[11.4R10.3] device.core.domain.net <---ouput
기능 2
cmod() {
X=""
case $1 in
("-b") X="bb";;
("-c") X="cpe";;
("-e") X="etech";;
("-k") X="core";;
("-o") X="ohgov";;
esac
awk '/Model/ {sub ("/show.version", "", FILENAME);
sub (".*/", "", FILENAME); print FILENAME " " $2}'
~/svn/nw_config_data/*${X}.domain.net/show.version | sort
}
입력/출력 예 :
% cmod -k <---input
device.core.domain.net mx480 <---output
,
이 스크립트가 수행하는 작업은 ~/svn/nw_config_data/디렉토리에 있으며 우리가 배포 한 모든 장치에 대한 디렉토리가 저장되어 있습니다. 각 장치 디렉토리에는 config 용 파일과 일부 show 명령이 있습니다. 내가 걱정하는 파일은 show.version 파일과 몇 줄의 정보입니다. "cver"의 경우 JUNOS Base OS 부팅 정보를 원합니다. "cmod"에 대해서는 Model에 대한 정보를 원합니다. 그러면 "X"가 -b = "bb"(device.bb.domain.net)과 같은 다른 장치 옵션을 가져옵니다.
다음은 show.version 파일의 예입니다.
Hostname: device-r0
Model: ex3300-24t
JUNOS Base OS boot [12.3R7.7]
JUNOS Base OS Software Suite [12.3R7.7]
JUNOS Kernel Software Suite [12.3R7.7]
JUNOS Crypto Software Suite [12.3R7.7]
JUNOS Online Documentation [12.3R7.7]
JUNOS Enterprise Software Suite [12.3R7.7]
JUNOS Packet Forwarding Engine Enterprise Software Suite [12.3R7.7]
JUNOS Routing Software Suite [12.3R7.7]
JUNOS Web Management [12.3R7.7]
JUNOS FIPS mode utilities [12.3R7.7]
이와 비슷한 지난 몇 일간의 검색을 시도해 보았습니다. awk 파이프에 대한 답변 하나를 보았지만 두 번째 awk 정보 만 출력합니다.
나는 파이핑 대신 awk를 & & 시도했다. 그리고 나에게 더 가까이 다가 갔지만 첫 번째 awk를 출력하고 두 번째 awk를 별도의 줄에 출력했다.
& & 예 :
cver() {
X=""
case $1 in
("-b") X="bb";;
("-c") X="cpe";;
("-e") X="etech";;
("-k") X="core";;
("-o") X="ohgov";;
("-h"|help) echo "'cver' allows us to see the software version
running on all Company Juniper devices.\n'cver' is especially helpful
in determining which devices require a software upgrade.\n\nOptions
are -b for bb, -c for cpe, -e for etech, -k for core, and -o for
ohgov.\n\nUse grep to find specific information. Ex: cver -c | grep
name";;
(*) echo "Unrecognized or incomplete command.\nUse -h for help.";;
esac
[ $X ] && awk -vSRCH="$3" '/JUNOS/ && /boot/ && $5 ~ "^[[]" SRCH
{sub ("/show.version", "", FILENAME); sub (".*/", "", FILENAME);
print $5 " " FILENAME}' ~/svn/nw_config_data/*${X}.domain.net/show.version
| sort && awk '/Model/ {sub ("/show.version", "", FILENAME);
sub (".*/", "", FILENAME); print $2}'
~/svn/nw_config_data/*${X}.domain.net/show.version | sort
입력/출력 예 : I는 입력/출력이 원하는
% cver -k <---input
[11.4R10.3] device.core.domain.net <---output
mx480 <---output
: 나는의 인쇄 부분을 상상
% cver -k <---input
device.core.domain.net mx480 [11.4R10.3] <---output
모양은 다음과 같습니다.
print FILENAME " " $2 " " $5
나는 또한 나의 첫 번째 함수에 추가/모델/& & $ 2 시도했다, 그러나 그것은 나에게 출력을 제공하지 않습니다 난 그냥이 시점에서 잃었어요.
예 :
cver() {
X=""
case $1 in
("-b") X="bb";;
("-c") X="cpe";;
("-e") X="etech";;
("-k") X="core";;
("-o") X="ohgov";;
("-h"|help) echo "'cver' allows us to see the software version
running on all Company Juniper devices.\n'cver' is especially helpful
in determining which devices require a software upgrade.\n\nOptions
are -b for bb, -c for cpe, -e for etech, -k for core, and -o for
ohgov.\n\nUse grep to find specific information. Ex: cver -c | grep
name";;
(*) echo "Unrecognized or incomplete command.\nUse -h for help.";;
esac
[ $X ] && awk -vSRCH="$3" '/JUNOS/ && /boot/ && $5 && /Model/ && $2 ~ "^[[]" SRCH
{sub ("/show.version", "", FILENAME); sub (".*/", "", FILENAME);
print FILENAME " " $2 " " $5}' ~/svn/nw_config_data/*${X}.domain.net/show.version | sort
입력 데이터의 적절한 샘플을 보여 주면 답변을 얻을 가능성이 높습니다. 그런 다음 추출하려는 부분을 개별적으로 확인한 것 같습니다. –
질문을 편집하여 자세한 정보를 보여 드리겠습니다. 고맙습니다. – rewalker3
수정 사항이 적용됩니다. 잘하면 도움이됩니다. – rewalker3