다음 형식의 파일이 있습니다.
root 0 system 0
bin 2
sys 3
security 7
cron 8
audit 10
lp 11
daemon 1 staff 1
bin 2 bin 2
sys 3
adm 4
sys 3 sys 3
쉘 스크립트를 사용하여 새로운 파일 형식으로 변환하고 싶습니다.
root system,bin,sys,security,cron,audit,lp
daemon staff
bin bin,sys,adm
sys sys
답변1
즉시 사용 가능한 awk
솔루션:
awk 'NF==4 && NR>1 {printf "\n" ; }
NF==4 { printf "%-10s %s",$1,$3}
NF==2 { printf ",%s",$1}
END { printf "\n" ; } '
어디
NF
필드 수(열 수)입니다.NR
레코드 수(줄 번호)입니다.- 다양한 조건에서 인쇄할 내용을 선택하고,
printf
후행 새 줄은 인쇄되지 않습니다.
답변2
perl -lane '
if ( @F == 4 ) { # num fields are 4
print $result if $. > 1; # in case we"re not @ BOF, show result
$result = join "\t", @F[0,2]; # initialize result
} else {
$result .= ",$F[0]"; # append result
}
eof && print $result; # on the last line, show result
' filename
답변3
perl -0pe 's/\h+\d+\h*\n\h+/,/g; s/\h+\d+//g' ex
- 첫 번째 대체는 숫자를 대체한 다음
\n...spaces
입니다 .,
- 두 번째 대체는 다른 숫자를 제거합니다.