비슷한 데이터가 포함된 파일이 있는데 비슷한 방식으로 정리하려고 합니다. 자세한 내용은 다음과 같습니다. 컨텍스트의 변수를 기반으로 스크립트를 수정했는데 원하는 결과를 얻을 수 없었습니다. 아마도 awk에 대한 지식이 부족하고 스크립팅에 대한 지식이 부족하기 때문일 것입니다.
Virtual_Machine OL6U6
Vdisk 0004fb00001200005e2ca2d2c7fc2d6f.img size 46GB
Vdisk 0004fb0000120000597ab28f2b6493f8.img size 51GB
Vdisk 0004fb00001200003edc9a2ae9cd5aa6.img size 31GB
Physical_Disk IBM (796)
device /dev/mapper/dm-0
shareddisk true
Physical_Disk IBM (829)
device /dev/mapper/dm-1
shareddisk true
Physical_Disk IBM (830)
device /dev/mapper/dm-2
shareddisk true
Physical_Disk IBM (742)
device /dev/mapper/dm-3
shareddisk true
아래 형식으로 가져오려고 합니다. 여기에는 두 가지 조건이 있습니다. M = 물리적 디스크 수 N = V 디스크 수 M > N인 경우 Virtual_Machine의 행 수 = M M < N인 경우 Virtual_Machine의 행 수 = N
Virtual Machine Vdisk size Physical_Disk device shareddisk
OL6U6 0004fb00001200005e2ca2d2c7fc2d6f.img 46GB IBM (796) /dev/mapper/dm-0 true
OL6U6 0004fb0000120000597ab28f2b6493f8.img 51GB IBM (829) /dev/mapper/dm-1 true
OL6U6 0004fb00001200003edc9a2ae9cd5aa6.img 31GB IBM (830) /dev/mapper/dm-2 true
OL6U6 - - IBM (742) /dev/mapper/dm-2 true
조언해주세요.
감사합니다, 다르샨
답변1
책 제목, 연도 및 논문의 배열을 유지 관리하여 awk를 사용하여 이를 수행할 수 있습니다. 귀하의 예에서는 논문에 연도가 없으므로 두 번째 열에 제목으로만 나열됩니다.
예는 다음과 같습니다.
#!/usr/bin/awk -f
function finish() {
rows = book;
if (rows < paper) rows = paper;
for (n = 0; n <= rows; ++n) {
printf "%-15s %-25s %-8s %s\n",
author,
n <= book ? books[n] : "-",
n <= book ? years[n] : "-",
n <= paper ? papers[n] : "-";
}
book = -1;
paper = -1;
}
BEGIN {
author = "?";
book = -1;
paper = -1;
printf "Author Books year Papers\n";
}
/^[[:space:]]*Author[[:space:]]/ {
finish();
author = $0;
sub("^[^[:space:]]+[[:space:]]+", "", author);
sub("[[:space:]]+$", "", author);
next;
}
/^[[:space:]]*(e)?paper[[:space:]]/ {
++paper;
item = $0;
sub("^[^[:space:]]+[[:space:]]+", "", item);
sub("[[:space:]]+$", "", item);
papers[paper] = item;
next;
}
/^[[:space:]]*([eE])?[bB]ook[[:space:]].*year[[:space:]]+[[:digit:]]+[[:space:]]*$/ {
++book;
item = $0;
sub("^[^[:space:]]*[[:space:]]*", "", item);
sub("[[:space:]]+$", "", item);
title = item;
sub("[[:space:]]*year[[:space:]]+[[:digit:]]+$", "", title);
year = item;
sub("^.*year[[:space:]]+", "", year);
books[book] = title;
years[book] = year;
next;
}
END {
finish();
}
출력:
$ ./foo <foo.in
Author Books year Papers
E. Narayanan Astrophysics 2001 Intelligent Transportation
E. Narayanan General Mechanics 2010 Nanotechnology Magazine
E. Narayanan Nuclear physics 2011 -
R Ramesh Organic Chemistry 2007 Ionic Batteries
R Ramesh Physical chemistry 2008 solar photocatalytic oxidation processes
R Ramesh - - Biological oxidation