awk 간명 한 튜 토리 얼
일부 네티즌 들 은 이틀 전 '리 눅 스에 서 알 아야 할 기교' 를 보고 awk 와 sed 를 가르쳐 달라 고 부탁 해 이 글 을 올 렸 다.나 는 이 80 대 젊 은 친구 들 이 awk/sed 와 같은 상고 신기 에 대해 좀 낯 설 어 졌 을 것 이 라 고 생각한다. 그래서 나 같은 늙 은 녀석 이 볶음밥 을 해 야 한다.게다가 AWK 는 베 어 랩 이 1977 년 만들어 낸 텍스트 출현 신기 로, 올 해 는 뱀의 해 이 며 AWK 의 본명 년 이 며 나이 도 나 와 비슷 해 그 를 위해 글 을 쓸 필요 가 있다.
AWK 라 고 부 르 는 이 유 는 세 명의 창업 자 를 뽑 았 기 때 문 입 니 다. Alfred Aho, Peter Weinberger, 그리고 Brian Kernighan 의 Family Name 의 첫 글자 입 니 다.AWK 를 배 우려 면 AWK 의 상당히 고전적 인 책 인 《 The AWK Programming Language 》 를 언급 해 야 한다. 그것 의 콩짜개 평 점 은 9.4 점 이다!아마 존 에 서 는 1022.30 원 에 팔 린 다.
제 가 여기 서 가 르 치 는 과정 은 모든 것 을 다 갖 추고 싶 지 않 습 니 다. 본 고 는 제 가 예전 에 고 언어 소개 와 마찬가지 로 모두 예시 이 고 대체적으로 쓸데없는 말 이 없습니다.
나 는 단지 두 가지 목적 을 달성 하고 싶다.
1) 버스 를 타고 출퇴근 하거나 변 기 를 타고 똥 을 쌀 때 다 읽 을 수 있다.
2) 나 는 단지 이 박문 을 화끈 한 탈 의 무녀 처럼 너의 흥 미 를 불 러 일 으 키 고 싶 을 뿐이다. 그리고 너 자신 이 가서 시간 을 내 서 훑 어야 한다.
잔말 말고 벗 어 봅 시다.
무대 에 오 르 기 시작 하 다.
나 는 netstat 명령 에서 다음 과 같은 정 보 를 예 로 들 었 다.
$ catnetstat.txt
Proto Recv-Q Send-Q Local-Address Foreign-Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
tcp 0 0 coolshell.cn:80 124.205.5.146:18245 TIME_WAIT
tcp 0 0 coolshell.cn:80 61.140.101.185:37538 FIN_WAIT2
tcp 0 0 coolshell.cn:80 110.194.134.189:1032 ESTABLISHED
tcp 0 0 coolshell.cn:80 123.169.124.111:49809 ESTABLISHED
tcp 0 0 coolshell.cn:80 116.234.127.77:11502 FIN_WAIT2
tcp 0 0 coolshell.cn:80 123.169.124.111:49829 ESTABLISHED
tcp 0 0 coolshell.cn:80 183.60.215.36:36970 TIME_WAIT
tcp 0 4166 coolshell.cn:80 61.148.242.38:30901 ESTABLISHED
tcp 0 1 coolshell.cn:80 124.152.181.209:26825 FIN_WAIT1
tcp 0 0 coolshell.cn:80 110.194.134.189:4796 ESTABLISHED
tcp 0 0 coolshell.cn:80 183.60.212.163:51082 TIME_WAIT
tcp 0 1 coolshell.cn:80 208.115.113.92:50601 LAST_ACK
tcp 0 0 coolshell.cn:80 123.169.124.111:49840 ESTABLISHED
tcp 0 0 coolshell.cn:80 117.136.20.85:50025 FIN_WAIT2
tcp 0 0 :::22 :::* LISTEN
다음은 가장 간단 하고 자주 사용 하 는 awk 예제 입 니 다. 출력 1 열 과 4 번 째 예 입 니 다.
$ awk '{print $1, $4}'netstat.txt
Proto Local-Address
tcp 0.0.0.0:3306
tcp 0.0.0.0:80
tcp 127.0.0.1:9000
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp :::22
awk 의 포맷 출력 을 살 펴 보 겠 습 니 다. C 언어의 printf 와 다 를 바 없습니다.
$ awk '{printf "%-8s %-8s %-8s %-18s %-22s %-15s
",$1,$2,$3,$4,$5,$6}'netstat.txt
Proto Recv-Q Send-Q Local-Address Foreign-Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
tcp 0 0 coolshell.cn:80 124.205.5.146:18245 TIME_WAIT
tcp 0 0 coolshell.cn:80 61.140.101.185:37538 FIN_WAIT2
tcp 0 0 coolshell.cn:80 110.194.134.189:1032 ESTABLISHED
tcp 0 0 coolshell.cn:80 123.169.124.111:49809 ESTABLISHED
tcp 0 0 coolshell.cn:80 116.234.127.77:11502 FIN_WAIT2
tcp 0 0 coolshell.cn:80 123.169.124.111:49829 ESTABLISHED
tcp 0 0 coolshell.cn:80 183.60.215.36:36970 TIME_WAIT
tcp 0 4166 coolshell.cn:80 61.148.242.38:30901 ESTABLISHED
tcp 0 1 coolshell.cn:80 124.152.181.209:26825 FIN_WAIT1
tcp 0 0 coolshell.cn:80 110.194.134.189:4796 ESTABLISHED
tcp 0 0 coolshell.cn:80 183.60.212.163:51082 TIME_WAIT
tcp 0 1 coolshell.cn:80 208.115.113.92:50601 LAST_ACK
tcp 0 0 coolshell.cn:80 123.169.124.111:49840 ESTABLISHED
tcp 0 0 coolshell.cn:80 117.136.20.85:50025 FIN_WAIT2
tcp 0 0 :::22 :::* LISTEN
외 투 를 벗다
필터 레코드
기록 을 어떻게 걸 러 내 는 지 다시 한 번 보 겠 습 니 다. (아래 여과 조건 은: 세 번 째 열의 값 은 0 & & 여섯 번 째 열의 값 은 LISTEN 입 니 다)
$ awk '$3==0 && $6=="LISTEN" 'netstat.txt
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
그 중의 '=' 은 비교 연산 자 이다.기타 비교 연산 자:! =, >, <, > =, < =
우 리 는 각종 필터 기록 방식 을 살 펴 보 자.
$ awk ' $3>0 {print $0}'netstat.txt
Proto Recv-Q Send-Q Local-Address Foreign-Address State
tcp 0 4166 coolshell.cn:80 61.148.242.38:30901 ESTABLISHED
tcp 0 1 coolshell.cn:80 124.152.181.209:26825 FIN_WAIT1
tcp 0 1 coolshell.cn:80 208.115.113.92:50601 LAST_ACK
만약 에 우리 가 헤더 가 필요 하 다 면 내부 변수 NR 를 도입 할 수 있 습 니 다.
$ awk '$3==0 && $6=="LISTEN" || NR==1 'netstat.txt
Proto Recv-Q Send-Q Local-Address Foreign-Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
포맷 출력 추가:
$ awk '$3==0 && $6=="LISTEN" || NR==1 {printf "%-20s %-20s %s
",$4,$5,$6}'netstat.txt
Local-Address Foreign-Address State
0.0.0.0:3306 0.0.0.0:* LISTEN
0.0.0.0:80 0.0.0.0:* LISTEN
127.0.0.1:9000 0.0.0.0:* LISTEN
:::22 :::* LISTEN
내장 변수
내장 변 수 를 말 하면 awk 의 내장 변 수 를 볼 수 있 습 니 다.
$0
현재 기록 (이 변수 에는 전체 줄 의 내용 이 저장 되 어 있 습 니 다)
$1~$n
현재 기 록 된 n 번 째 필드, 필드 간 FS 로 구 분 됩 니 다.
FS
입력 필드 구분자 기본 값 은 빈 칸 이나 Tab 입 니 다.
NF
현재 기록 중인 필드 개 수 는 몇 개의 열 이 있 습 니까?
NR
이미 읽 은 기록 수 는 줄 번호 입 니 다. 1 부터 여러 파일 이 있 으 면 이 값 도 계속 누적 되 고 있 습 니 다.
FNR
현재 기록 수 는 NR 와 달리 이 값 은 각 파일 의 줄 번호 입 니 다.
RS
입력 한 기록 구분자, 기본 값 은 줄 바 꿈 문자 입 니 다.
OFS
출력 필드 구분자, 기본 값 도 공백
ORS
출력 기록 구분자
FILENAME
현재 입력 한 파일 의 이름
어떻게 사용 합 니까? 예 를 들 어 우리 가 줄 번 호 를 출력 하려 면:
$ awk '$3==0 && $6=="ESTABLISHED" || NR==1 {printf "%02s %s %-20s %-20s %s
",NR, FNR, $4,$5,$6}'netstat.txt
01 1 Local-Address Foreign-Address State
07 7 coolshell.cn:80 110.194.134.189:1032 ESTABLISHED
08 8 coolshell.cn:80 123.169.124.111:49809 ESTABLISHED
10 10 coolshell.cn:80 123.169.124.111:49829 ESTABLISHED
14 14 coolshell.cn:80 110.194.134.189:4796 ESTABLISHED
17 17 coolshell.cn:80 123.169.124.111:49840 ESTABLISHED
지정 구분자
$ awk 'BEGIN{FS=":"} {print $1,$3,$6}'/etc/passwd
root 0 /root
bin 1 /bin
daemon 2 /sbin
adm 3 /var/adm
lp 4 /var/spool/lpd
sync 5 /sbin
shutdown6/sbin
halt 7 /sbin
위의 명령 도 다음 과 같다. (- F 는 구분자 지정)
$ awk -F: '{print $1,$3,$6}'/etc/passwd
주: 만약 당신 이 여러 개의 구분자 를 지정 하려 고 한다 면, 당신 은 이렇게 할 수 있 습 니 다.
awk -F '[;:]'
구분자 로 출력 하 는 예 를 보 겠 습 니 다. (아래/etc/passwd 파일 을 사 용 했 습 니 다. 이 파일 은: 구 분 된 것 입 니 다)
$ awk -F: '{print $1,$3,$6}'OFS="\t"/etc/passwd
root 0 /root
bin 1 /bin
daemon 2 /sbin
adm 3 /var/adm
lp 4 /var/spool/lpd
sync 5 /sbin
셔츠 를 벗다
문자열 일치
우 리 는 몇 개의 문자열 이 일치 하 는 예 시 를 다시 보 았 다.
$ awk '$6 ~ /FIN/ || NR==1 {print NR,$4,$5,$6}'OFS="\t"netstat.txt
1 Local-Address Foreign-Address State
6 coolshell.cn:80 61.140.101.185:37538 FIN_WAIT2
9 coolshell.cn:80 116.234.127.77:11502 FIN_WAIT2
13 coolshell.cn:80 124.152.181.209:26825 FIN_WAIT1
18 coolshell.cn:80 117.136.20.85:50025 FIN_WAIT2
$ $ awk '$6 ~ /WAIT/ || NR==1 {print NR,$4,$5,$6}'OFS="\t"netstat.txt
1 Local-Address Foreign-Address State
5 coolshell.cn:80 124.205.5.146:18245 TIME_WAIT
6 coolshell.cn:80 61.140.101.185:37538 FIN_WAIT2
9 coolshell.cn:80 116.234.127.77:11502 FIN_WAIT2
11 coolshell.cn:80 183.60.215.36:36970 TIME_WAIT
13 coolshell.cn:80 124.152.181.209:26825 FIN_WAIT1
15 coolshell.cn:80 183.60.212.163:51082 TIME_WAIT
18 coolshell.cn:80 117.136.20.85:50025 FIN_WAIT2
위의 첫 번 째 예 는 FIN 상태 와 일치 하고 두 번 째 예 는 WAIT 문자 와 일치 하 는 상태 입 니 다.사실 ~ 표시 모드 시작.모드이것 이 바로 정규 표현 식 의 일치 입 니 다.
사실 awk 는 grep 처럼 첫 줄 과 일치 할 수 있 습 니 다. 이렇게:
$ awk '/LISTEN/'netstat.txt
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
우 리 는 "/FIN | TIME/"를 사용 하여 FIN 이나 TIME 에 일치 할 수 있 습 니 다.
$ awk '$6 ~ /FIN|TIME/ || NR==1 {print NR,$4,$5,$6}'OFS="\t"netstat.txt
1 Local-Address Foreign-Address State
5 coolshell.cn:80 124.205.5.146:18245 TIME_WAIT
6 coolshell.cn:80 61.140.101.185:37538 FIN_WAIT2
9 coolshell.cn:80 116.234.127.77:11502 FIN_WAIT2
11 coolshell.cn:80 183.60.215.36:36970 TIME_WAIT
13 coolshell.cn:80 124.152.181.209:26825 FIN_WAIT1
15 coolshell.cn:80 183.60.212.163:51082 TIME_WAIT
18 coolshell.cn:80 117.136.20.85:50025 FIN_WAIT2
다시 모드 에서 반대 하 는 예 를 보 자.
$ awk '$6 !~ /WAIT/ || NR==1 {print NR,$4,$5,$6}'OFS="\t"netstat.txt
1 Local-Address Foreign-Address State
2 0.0.0.0:3306 0.0.0.0:* LISTEN
3 0.0.0.0:80 0.0.0.0:* LISTEN
4 127.0.0.1:9000 0.0.0.0:* LISTEN
7 coolshell.cn:80 110.194.134.189:1032 ESTABLISHED
8 coolshell.cn:80 123.169.124.111:49809 ESTABLISHED
10 coolshell.cn:80 123.169.124.111:49829 ESTABLISHED
12 coolshell.cn:80 61.148.242.38:30901 ESTABLISHED
14 coolshell.cn:80 110.194.134.189:4796 ESTABLISHED
16 coolshell.cn:80 208.115.113.92:50601 LAST_ACK
17 coolshell.cn:80 123.169.124.111:49840 ESTABLISHED
19 :::22 :::* LISTEN
또는:
awk '!/WAIT/' netstat.txt
환산 서류
awk 분할 파일 은 간단 합 니 다. 방향 을 바 꾸 면 됩 니 다.아래 의 이 예 는 6 번 째 예 로 파일 을 구분 하 는 것 으로 상당히 간단 하 다 (그 중의 NR! = 1 은 표 두 를 처리 하지 않 는 다 는 뜻).
$ awk 'NR!=1{print > $6}'netstat.txt
$ ls
ESTABLISHED FIN_WAIT1 FIN_WAIT2 LAST_ACK LISTEN netstat.txt TIME_WAIT
$ catESTABLISHED
tcp 0 0 coolshell.cn:80 110.194.134.189:1032 ESTABLISHED
tcp 0 0 coolshell.cn:80 123.169.124.111:49809 ESTABLISHED
tcp 0 0 coolshell.cn:80 123.169.124.111:49829 ESTABLISHED
tcp 0 4166 coolshell.cn:80 61.148.242.38:30901 ESTABLISHED
tcp 0 0 coolshell.cn:80 110.194.134.189:4796 ESTABLISHED
tcp 0 0 coolshell.cn:80 123.169.124.111:49840 ESTABLISHED
$ catFIN_WAIT1
tcp 0 1 coolshell.cn:80 124.152.181.209:26825 FIN_WAIT1
$ catFIN_WAIT2
tcp 0 0 coolshell.cn:80 61.140.101.185:37538 FIN_WAIT2
tcp 0 0 coolshell.cn:80 116.234.127.77:11502 FIN_WAIT2
tcp 0 0 coolshell.cn:80 117.136.20.85:50025 FIN_WAIT2
$ catLAST_ACK
tcp 0 1 coolshell.cn:80 208.115.113.92:50601 LAST_ACK
$ catLISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
$ catTIME_WAIT
tcp 0 0 coolshell.cn:80 124.205.5.146:18245 TIME_WAIT
tcp 0 0 coolshell.cn:80 183.60.215.36:36970 TIME_WAIT
tcp 0 0 coolshell.cn:80 183.60.212.163:51082 TIME_WAIT
지정 한 열 을 파일 로 출력 할 수도 있 습 니 다:
awk 'NR!=1{print $4,$5 > $6}' netstat.txt
좀 더 복잡 하 게: (그 중의 if - else - if 문 구 를 주의 하 세 요. awk 는 사실 스 크 립 트 해석 기 임 을 알 수 있 습 니 다)
$ awk 'NR!=1{if($6 ~/TIME|ESTABLISHED/) print >"1.txt";
elseif($6 ~/LISTEN/) print >"2.txt";
elseprint >"3.txt"}' netstat.txt
$ ls?.txt
1.txt 2.txt 3.txt
$ cat1.txt
tcp 0 0 coolshell.cn:80 124.205.5.146:18245 TIME_WAIT
tcp 0 0 coolshell.cn:80 110.194.134.189:1032 ESTABLISHED
tcp 0 0 coolshell.cn:80 123.169.124.111:49809 ESTABLISHED
tcp 0 0 coolshell.cn:80 123.169.124.111:49829 ESTABLISHED
tcp 0 0 coolshell.cn:80 183.60.215.36:36970 TIME_WAIT
tcp 0 4166 coolshell.cn:80 61.148.242.38:30901 ESTABLISHED
tcp 0 0 coolshell.cn:80 110.194.134.189:4796 ESTABLISHED
tcp 0 0 coolshell.cn:80 183.60.212.163:51082 TIME_WAIT
tcp 0 0 coolshell.cn:80 123.169.124.111:49840 ESTABLISHED
$ cat2.txt
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
$ cat3.txt
tcp 0 0 coolshell.cn:80 61.140.101.185:37538 FIN_WAIT2
tcp 0 0 coolshell.cn:80 116.234.127.77:11502 FIN_WAIT2
tcp 0 1 coolshell.cn:80 124.152.181.209:26825 FIN_WAIT1
tcp 0 1 coolshell.cn:80 208.115.113.92:50601 LAST_ACK
tcp 0 0 coolshell.cn:80 117.136.20.85:50025 FIN_WAIT2
통계
아래 명령 은 모든 C 파일, CPP 파일, H 파일 의 파일 크기 를 합산 합 니 다.
$ ls-l *.cpp *.c *.h |awk'{sum+=$5} END {print sum}'
2511401
우 리 는 각 connection 상 태 를 통계 하 는 용법 을 다시 보 겠 습 니 다. (우 리 는 프로 그래 밍 의 그림 자 를 볼 수 있 습 니 다. 모두 프로그래머 이 므 로 설명 하지 않 겠 습 니 다. 그 중의 배열 의 용법 에 주의 하 세 요)
$ awk 'NR!=1{a[$6]++;} END {for (i in a) print i ", " a[i];}'netstat.txt
TIME_WAIT, 3
FIN_WAIT1, 1
ESTABLISHED, 6
FIN_WAIT2, 3
LAST_ACK, 1
LISTEN, 4
모든 사용자 의 프로 세 스 가 얼마나 많은 메모 리 를 차지 하 는 지 다시 한 번 봅 시다. (주: sum 의 RSS 열)
$ ps aux | awk'NR!=1{a[$1]+=$6;} END { for(i in a) print i ", " a[i]"KB";}'
dbus, 540KB
mysql, 99928KB
www, 3264924KB
root, 63644KB
hchen, 6020KB
속옷 을 벗다
awk 스 크 립 트
위 에서 우 리 는 END 키 워드 를 볼 수 있다.END 는 '모든 줄 을 처리 한 표지' 라 는 뜻 입 니 다. 즉, END 는 BEGIN 을 소개 할 필요 가 있 습 니 다. 이 두 키 워드 는 실행 전과 실행 후의 뜻 을 의미 합 니 다. 문법 은 다음 과 같 습 니 다.
만약 에 이런 파일 이 있다 고 가정 하면 (학생 성적 표):
$ catscore.txt
Marry 2143 78 84 77
Jack 2321 66 78 45
Tom 2122 48 77 71
Mike 2537 87 97 95
Bob 2415 40 57 62
우리 awk 스 크 립 트 는 다음 과 같 습 니 다.
$ catcal.awk
#!/bin/awk -f
#
BEGIN {
math = 0
english = 0
computer = 0
printf"NAME NO. MATH ENGLISH COMPUTER TOTAL
"
printf"---------------------------------------------
"
}
#
{
math+=$3
english+=$4
computer+=$5
printf"%-6s %-6s %4d %8d %8d %8d
", $1, $2, $3,$4,$5, $3+$4+$5
}
#
END {
printf"---------------------------------------------
"
printf" TOTAL:%10d %8d %8d
", math, english, computer
printf"AVERAGE:%10.2f %8.2f %8.2f
", math/NR, english/NR, computer/NR
}
실행 결 과 를 살 펴 보 겠 습 니 다. (이렇게 실행 할 수도 있 습 니 다./cal. awk score. txt)
$ awk-fcal.awkscore.txt
NAME NO. MATH ENGLISH COMPUTER TOTAL
---------------------------------------------
Marry 2143 78 84 77 239
Jack 2321 66 78 45 189
Tom 2122 48 77 71 196
Mike 2537 87 97 95 279
Bob 2415 40 57 62 159
---------------------------------------------
TOTAL: 319 393 350
AVERAGE: 63.80 78.60 70.00
환경 변수
즉, 스 크 립 트 를 말 했 습 니 다. 환경 변수 와 어떻게 상호작용 하 는 지 살 펴 보 겠 습 니 다. (- v 매개 변수 와 ENVIRON 을 사용 하고 ENVIRON 의 환경 변 수 를 사용 하려 면 export 가 필요 합 니 다)
$ x=5
$ y=10
$ exporty
$ echo$x $y
5 10
$ awk -vval=$x'{print $1, $2, $3, $4+val, $5+ENVIRON["y"]}'OFS="\t"score.txt
Marry 2143 78 89 87
Jack 2321 66 83 55
Tom 2122 48 82 81
Mike 2537 87 102 105
Bob 2415 40 62 72
허드렛일
마지막 으로 우 리 는 몇 가지 작은 예 를 다시 보 자.
# file 80
awk 'length>80' file
# IP
netstat-ntu |awk'{print $5}'| cut-d: -f1 |sort|uniq -c | sort-nr
# 99
seq 9 | sed 'H;g'|awk-vRS='''{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"
":"\t")}'
스스로 훑 어 라
그 중 일부 지식 에 대해 서 는 gawk 의 매 뉴 얼 을 참조 할 수 있 습 니 다.
(전문 완료)
(본 사이트 의 글 을 옮 겨 실 으 려 면 작성 자 와 출처 쿨 케이스 – CoolShell. cn, 어떠한 상업 용도 로 도 사용 하지 마 십시오)
——===
공익 사업 을 지원 하기 위해 쿨 케이스 404 페이지 를 방문 하 십시오 = = -
전재 주소
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.