Skip to content

Latest commit

ย 

History

History
694 lines (528 loc) ยท 34.5 KB

03.md

File metadata and controls

694 lines (528 loc) ยท 34.5 KB

ไธ‰ใ€่Žทๅ–ๆ•ฐๆฎ

ๅŽŸๆ–‡๏ผšhttps://datascienceatthecommandline.com/2e/chapter-3-obtaining-data.html

่ดก็Œฎ่€…๏ผšTing-xin

ๆœฌ็ซ ่ฎจ่ฎบ OSEMN ๆจกๅž‹็š„็ฌฌไธ€ๆญฅ๏ผš่Žทๅ–ๆ•ฐๆฎใ€‚ๆฏ•็ซŸ๏ผŒๆฒกๆœ‰ไปปไฝ•ๆ•ฐๆฎ๏ผŒๆˆ‘ไปฌๅฐฑๆฒกๆœ‰ๅคšๅฐ‘ๆ•ฐๆฎ็ง‘ๅญฆๅฏไปฅๅšใ€‚ๆˆ‘ๅ‡่ฎพไฝ ๅทฒ็ปๆœ‰ไบ†่งฃๅ†ณๆ•ฐๆฎ็ง‘ๅญฆ้—ฎ้ข˜ๆ‰€้œ€็š„ๆ•ฐๆฎ๏ผŒ็ฌฌไธ€ๆญฅไฝ ้œ€่ฆๆŠŠ่ฟ™ไบ›ๆ•ฐๆฎๆ”พๅˆฐไฝ ็š„็”ต่„‘ไธŠ๏ผˆไนŸๅฏ่ƒฝๆ”พๅˆฐ Docker ๅฎนๅ™จ้‡Œ๏ผ‰ใ€‚

ๅœจ Unix ๅ“ฒๅญฆไธญ๏ผŒๆ–‡ๆœฌๆ˜ฏไธ€ไธช้€š็”จๆŽฅๅฃใ€‚ๅ‡ ไนŽๆฏไธชๅ‘ฝไปค่กŒๅทฅๅ…ท้ƒฝๅฐ†ๆ–‡ๆœฌไฝœไธบ่พ“ๅ…ฅ๏ผŒๆˆ–่€…ไปฅๆ–‡ๆœฌไฝœไธบ่พ“ๅ‡บ๏ผŒๆˆ–่€…ไธค่€…้ƒฝๆœ‰ใ€‚่ฟ™ๅฐฑๆ˜ฏไธบไป€ไนˆๅ‘ฝไปค่กŒๅทฅๅ…ทๅฏไปฅๅพˆๅฅฝๅœฐๅๅŒๅทฅไฝœ็š„ไธป่ฆๅŽŸๅ› ใ€‚็„ถ่€Œ๏ผŒๆญฃๅฆ‚ๆˆ‘ไปฌๅฐ†็œ‹ๅˆฐ็š„๏ผŒๅณไฝฟๅชๆ˜ฏๆ–‡ๆœฌไนŸๅฏไปฅๆœ‰ๅคš็งๅฝขๅผใ€‚

ๆˆ‘ไปฌๅฏไปฅ้€š่ฟ‡ๅคš็งๆ–นๅผ่Žทๅ–ๆ•ฐๆฎ๏ผŒไพ‹ๅฆ‚ไปŽๆœๅŠกๅ™จไธ‹่ฝฝๆ•ฐๆฎใ€ๆŸฅ่ฏขๆ•ฐๆฎๅบ“ๆˆ–่ฟžๆŽฅๅˆฐ Web APIใ€‚ๆœ‰ๆ—ถ๏ผŒๆ•ฐๆฎไปฅๅŽ‹็ผฉ็š„ๅฝขๅผๆˆ–ไบŒ่ฟ›ๅˆถๆ ผๅผๅ‡บ็Žฐ๏ผŒๅฆ‚ Microsoft Excel ็”ตๅญ่กจๆ ผใ€‚ๅœจ่ฟ™ไธ€็ซ ไธญ๏ผŒๆˆ‘ไปฌๅฐ†่ฎจ่ฎบไบ†ๅ‡ ไธชๆœ‰ๅŠฉไบŽไปŽๅ‘ฝไปค่กŒ่งฃๅ†ณ่ฟ™ไธช้—ฎ้ข˜็š„ๅทฅๅ…ท๏ผŒๅŒ…ๆ‹ฌ๏ผšcurl๏ผŒin2csv๏ผŒsql2csv๏ผŒไปฅๅŠtarใ€‚

3.1 ๆฆ‚่ฟฐ

ๅœจๆœฌ็ซ ไธญ๏ผŒไฝ ๅฐ†ๅญฆไน ๅฆ‚ไฝ•๏ผš

  • ๅฐ†ๆœฌๅœฐๆ–‡ไปถๅคๅˆถๅˆฐ Docker ้•œๅƒ
  • ไปŽไบ’่”็ฝ‘ไธ‹่ฝฝๆ•ฐๆฎ
  • ่งฃๅŽ‹็ผฉๆ–‡ไปถ
  • ไปŽ็”ตๅญ่กจๆ ผไธญๆๅ–ๆ•ฐๆฎ
  • ๆŸฅ่ฏขๅ…ณ็ณปๆ•ฐๆฎๅบ“
  • ่ฐƒ็”จ Web API

้ฆ–ๅ…ˆๆ‰“ๅผ€็ฌฌไธ‰็ซ ็š„็›ฎๅฝ•๏ผš

$ cd /data/ch03

$ l
total 924K
-rw-r--r-- 1 dst dst 627K Mar  3 10:41 logs.tar.gz
-rw-r--r-- 1 dst dst 189K Mar  3 10:41 r-datasets.db
-rw-r--r-- 1 dst dst  149 Mar  3 10:41 tmnt-basic.csv
-rw-r--r-- 1 dst dst  148 Mar  3 10:41 tmnt-missing-newline.csv
-rw-r--r-- 1 dst dst  181 Mar  3 10:41 tmnt-with-header.csv
-rw-r--r-- 1 dst dst  91K Mar  3 10:41 top2000.xlsx

่Žทๅ–่ฟ™ไบ›ๆ–‡ไปถๅทฒ็ปๅœจ็ฌฌไบŒ็ซ ไธญๅš่ฟ‡ไบ†ใ€‚ไปปไฝ•ๅ…ถไป–ๆ–‡ไปถ้ƒฝๆ˜ฏไฝฟ็”จๅ‘ฝไปค่กŒๅทฅๅ…ทไธ‹่ฝฝๆˆ–็”Ÿๆˆ็š„ใ€‚

3.2 ๅฐ†ๆœฌๅœฐๆ–‡ไปถๅคๅˆถๅˆฐ Docker ๅฎนๅ™จ

ไธ€็งๅธธ่ง็š„ๆƒ…ๅ†ตๆ˜ฏ๏ผŒไฝ ่‡ชๅทฑ็š„่ฎก็ฎ—ๆœบไธŠๅทฒ็ปๆœ‰ไบ†้œ€่ฆ็š„ๆ–‡ไปถ๏ผŒๆœฌ่Š‚ไป‹็ปไบ†ๅฆ‚ไฝ•ๅฐ†่ฟ™ไบ›ๆ–‡ไปถๆ”พๅ…ฅ Docker ๅฎนๅ™จใ€‚

ๆˆ‘ๅœจ็ฌฌไบŒ็ซ ๆๅˆฐ Docker ๅฎนๅ™จๆ˜ฏไธ€ไธช้š”็ฆป็š„่™šๆ‹Ÿ็Žฏๅขƒใ€‚ไฝ†ๆ˜ฏๆœ‰ไธ€ไธชไพ‹ๅค–๏ผšๆ–‡ไปถๅฏไปฅๅœจ Docker ๅฎนๅ™จไธญ่ฟ›ๅ‡บไผ ่พ“ใ€‚่ฟ่กŒdocker run็š„ๆœฌๅœฐ็›ฎๅฝ•ไผš่ขซๆ˜ ๅฐ„ๅˆฐ Docker ๅฎนๅ™จไธญ็š„ไธ€ไธช็›ฎๅฝ•ใ€‚่ฟ™ไธช็›ฎๅฝ•ๅซๅš/dataใ€‚ๆณจๆ„่ฟ™ไธๆ˜ฏไธป็›ฎๅฝ•๏ผŒไธป็›ฎๅฝ•ๆ˜ฏ/home/dstใ€‚

ๅฆ‚ๆžœไฝ ็š„ๆœฌๅœฐ่ฎก็ฎ—ๆœบไธŠๆœ‰ไธ€ไธชๆˆ–ๅคšไธชๆ–‡ไปถ๏ผŒๅนถไธ”ไฝ ๆƒณๅฏนๅฎƒไปฌๅบ”็”จไธ€ไบ›ๅ‘ฝไปค่กŒๅทฅๅ…ท๏ผŒ้‚ฃไนˆไฝ ้œ€่ฆๅฐ†่ฟ™ไบ›ๆ–‡ไปถๅคๅˆถๆˆ–็งปๅŠจๅˆฐ้‚ฃไธชๆ˜ ๅฐ„็š„็›ฎๅฝ•ไธญใ€‚ๅ‡่ฎพไฝ ็š„ไธ‹่ฝฝ็›ฎๅฝ•ไธญๆœ‰ไธ€ไธชๅไธบlogs.csv็š„ๆ–‡ไปถ๏ผŒ็Žฐๅœจๆˆ‘ไปฌๆฅๅคๅˆถๆ–‡ไปถใ€‚

ๅฆ‚ๆžœไฝ ๆญฃๅœจ่ฟ่กŒ Windows๏ผŒ่ฏทๆ‰“ๅผ€ๅ‘ฝไปคๆ็คบ็ฌฆๆˆ– PowerShell ๅนถ่ฟ่กŒไปฅไธ‹ไธคไธชๅ‘ฝไปค๏ผš

> cd %UserProfile%\Downloads
> copy logs.csv MyDataScienceToolbox\

ๅฆ‚ๆžœไฝ ่ฟ่กŒ็š„ๆ˜ฏ Linux ๆˆ– macOS๏ผŒ่ฏทๆ‰“ๅผ€ไธ€ไธช็ปˆ็ซฏๅนถๅœจไฝ ็š„ๆ“ไฝœ็ณป็ปŸไธŠๆ‰ง่กŒไปฅไธ‹ๅ‘ฝไปค๏ผˆ่€Œไธๆ˜ฏๅœจ Docker ๅฎนๅ™จไธญ๏ผ‰:

$ cp ~/Downloads/logs.csv ~/my-data-science-toolbox

ไฝ ไนŸๅฏไปฅไฝฟ็”จๅ›พๅฝขๆ–‡ไปถ็ฎก็†ๅ™จ๏ผˆๅฆ‚ Windows Explorer ๆˆ– macOS Finder)ๅฐ†ๆ–‡ไปถๆ‹–ๆ”พๅˆฐๆญฃ็กฎ็š„็›ฎๅฝ•ไธญใ€‚

3.3 ไปŽไบ’่”็ฝ‘ไธŠไธ‹่ฝฝๆ•ฐๆฎ

ๆฏซๆ— ็–‘้—ฎ๏ผŒไบ’่”็ฝ‘ๅทฒ็ปๆˆไธบไบ†ๆ•ฐๆฎ็š„ๆœ€ๅคงๆฅๆบใ€‚ๅฝ“ไปŽไบ’่”็ฝ‘ไธ‹่ฝฝๆ•ฐๆฎๆ—ถ๏ผŒๅ‘ฝไปค่กŒๅทฅๅ…ทcurl่ขซ่ฎคไธบๆ˜ฏๅ‘ฝไปค่กŒไธญ็š„็‘žๅฃซๅ†›ๅˆ€ใ€‚

3.3.1 curlไป‹็ป

ๅฝ“ไฝ ๆต่งˆๅˆฐไธ€ไธชไปฃ่กจ็ปŸไธ€่ต„ๆบๅฎšไฝ็ฌฆ็š„ URL ๆ—ถ๏ผŒไฝ ็š„ๆต่งˆๅ™จไผšๆธฒๆŸ“ๅฎƒไธ‹่ฝฝ็š„ๆ•ฐๆฎใ€‚ไพ‹ๅฆ‚๏ผŒๆต่งˆๅ™จไผšๅ‘ˆ็Žฐ HTML ๆ–‡ไปถ๏ผŒ่‡ชๅŠจๆ’ญๆ”พ่ง†้ข‘ๆ–‡ไปถ๏ผŒๆ˜พ็คบ PDF ๆ–‡ไปถใ€‚็„ถ่€Œ๏ผŒๅฝ“ไฝ ไฝฟ็”จcurlๆฅ่ฎฟ้—ฎไธ€ไธช URL ๆ—ถ๏ผŒๅฎƒไผšไธ‹่ฝฝๆ•ฐๆฎ๏ผŒๅนถๅœจ้ป˜่ฎคๆƒ…ๅ†ตไธ‹ๅฐ†ๅ…ถๆ‰“ๅฐๅ‡บๆฅใ€‚curlไธไผšๅšไปปไฝ•่งฃ้‡Šๅ’ŒๆธฒๆŸ“๏ผŒไฝ†ๅนธ่ฟ็š„ๆ˜ฏๅฏไปฅไฝฟ็”จๅ…ถไป–ๅ‘ฝไปค่กŒๅทฅๅ…ทๆฅ่ฟ›ไธ€ๆญฅๅค„็†ๆ•ฐๆฎใ€‚

ๆœ€็ฎ€ๅ•็š„่ฐƒ็”จcurlๆ˜ฏๆŒ‡ๅฎšไธ€ไธช URL ไฝœไธบๅ‘ฝไปค่กŒๅ‚ๆ•ฐใ€‚็Žฐๅœจ่ฎฉๆˆ‘ไปฌ่ฏ•็€ไปŽ็ปดๅŸบ็™พ็ง‘ไธ‹่ฝฝไธ€็ฏ‡ๆ–‡็ซ ๏ผš

$ curl "https://en.wikipedia.org/wiki/List_of_windmills_in_the_Netherlands" |
> trim # โžŠ
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0<!
DOCTYPE html>
<html class="client-nojs" lang="en" dir="ltr">
<head>
<meta charset="UTF-8"/>
<title>List of windmills in the Netherlands - Wikipedia</title>
<script>document.documentElement.className="client-js";RLCONF={"wgBreakFrames":โ€ฆ
"wgRelevantPageName":"List_of_windmills_in_the_Netherlands","wgRelevantArticleIโ€ฆ
,"site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","usโ€ฆ
"ext.growthExperiments.SuggestedEditSession"];</script>
<script>(RLQ=window.RLQ||[]).push(function(){mw.loader.implement("user.options@โ€ฆ
100  250k  100  250k    0     0   866k      0 --:--:-- --:--:-- --:--:--  891k
โ€ฆ with 1760 more lines

โžŠ ่ฎฐไฝ๏ผŒtrimๅชๆ˜ฏ็”จๆฅ่ฎฉ่พ“ๅ‡บๅพˆๅฅฝๅœฐ้€‚ๅบ”็ปˆ็ซฏ

ๅฆ‚ไฝ ๆ‰€่ง๏ผŒcurlไธ‹่ฝฝ็ปดๅŸบ็™พ็ง‘็š„ๆœๅŠกๅ™จ่ฟ”ๅ›ž็š„ๅŽŸๅง‹ HTML ไธ่ฟ›่กŒไปปไฝ•่งฃ้‡Š๏ผŒๆ‰€ๆœ‰ๅ†…ๅฎน็ซ‹ๅณๆ‰“ๅฐๅœจๆ ‡ๅ‡†่พ“ๅ‡บไธŠใ€‚ๅ› ไธบ่ฟ™ไธช URL๏ผŒไฝ ไผš่ฎคไธบ่ฟ™็ฏ‡ๆ–‡็ซ ไผšๅˆ—ๅ‡บ่ทๅ…ฐๆ‰€ๆœ‰็š„้ฃŽ่ฝฆใ€‚็„ถ่€Œ๏ผŒๆ˜พ็„ถๆœ‰ๅคชๅคš็š„้ฃŽ่ฝฆ็•™ไธ‹ๆฅ๏ผŒๆฏไธช็œ้ƒฝๆœ‰่‡ชๅทฑ็š„็ฝ‘้กตใ€‚ไปคไบบ็€่ฟทใ€‚

้ป˜่ฎคๆƒ…ๅ†ตไธ‹๏ผŒcurlไผš่พ“ๅ‡บไธ€ไธช่ฟ›ๅบฆๆก๏ผŒๆ˜พ็คบไธ‹่ฝฝ้€Ÿๅบฆๅ’Œ้ข„ๆœŸๅฎŒๆˆๆ—ถ้—ดใ€‚่ฟ™ไธช่พ“ๅ‡บไธๆ˜ฏๅ†™ๅˆฐๆ ‡ๅ‡†่พ“ๅ‡บ๏ผŒ่€Œๆ˜ฏไธ€ไธชๅ•็‹ฌ็š„้€š้“๏ผŒ็งฐไธบๆ ‡ๅ‡†้”™่ฏฏ๏ผŒๆ‰€ไปฅๅฝ“ไฝ ๅœจ็ฎก้“ไธญๆทปๅŠ ๅฆไธ€ไธชๅทฅๅ…ทๆ—ถ๏ผŒๅฎƒไปฌไน‹้—ดไธไผšๅนฒๆ‰ฐใ€‚่™ฝ็„ถ่ฟ™ไบ›ไฟกๆฏๅœจไธ‹่ฝฝ้žๅธธๅคง็š„ๆ–‡ไปถๆ—ถไผšๅพˆๆœ‰็”จ๏ผŒไฝ†ๅฎƒ้€šๅธธไผšๅˆ†ๆ•ฃๆˆ‘ไปฌ็š„ๆณจๆ„ๅŠ›๏ผŒๆ‰€ไปฅๆˆ‘ๆŒ‡ๅฎšไบ†-s้€‰้กนๆฅ่ฎฉๅฟฝ็•ฅ่ฟ™ไธช่พ“ๅ‡บใ€‚

$ curl -s "https://en.wikipedia.org/wiki/List_of_windmills_in_Friesland" |
> pup -n 'table.wikitable tr' # โžŠ
234

โžŠ ๆˆ‘ไผš่ฎจ่ฎบpup๏ผŒไธ€ไธชๆ–นไพฟ็š„ๆŠ“ๅ–็ฝ‘็ซ™็š„ๅทฅๅ…ท๏ผŒๆ›ด่ฏฆ็ป†็š„ๅ†…ๅฎนๅœจ็ฌฌไบ”็ซ ใ€‚

ไฝ ็Ÿฅ้“ๅ—๏ผŒไป…ๅœจๅผ—้‡Œๆ–ฏๅ…ฐ็œๅฐฑๆœ‰ 234 ๅบง้ฃŽ่ฝฆ๏ผ๏ผˆ่ฏ‘่€…ไนŸไธๆ‡‚ไธบๅ•ฅ็ช็„ถๆฅ่ฟ™ไนˆไธ€ๅฅ

3.3.2 ไฟๅญ˜

ไฝ ๅฏไปฅ้€š่ฟ‡ๆทปๅŠ -O้€‰้กนๅฐ†curl็š„่พ“ๅ‡บไฟๅญ˜ๅˆฐๆ–‡ไปถไธญ๏ผŒๆ–‡ไปถๅๅฐ†ๅŸบไบŽ URL ็š„ๆœ€ๅŽไธ€้ƒจๅˆ†ใ€‚

$ curl -s "https://en.wikipedia.org/wiki/List_of_windmills_in_Friesland" -O

$ l
total 1.4M
-rw-r--r-- 1 dst dst 432K Mar  3 10:41 List_of_windmills_in_Friesland
-rw-r--r-- 1 dst dst 627K Mar  3 10:41 logs.tar.gz
-rw-r--r-- 1 dst dst 189K Mar  3 10:41 r-datasets.db
-rw-r--r-- 1 dst dst  149 Mar  3 10:41 tmnt-basic.csv
-rw-r--r-- 1 dst dst  148 Mar  3 10:41 tmnt-missing-newline.csv
-rw-r--r-- 1 dst dst  181 Mar  3 10:41 tmnt-with-header.csv
-rw-r--r-- 1 dst dst  91K Mar  3 10:41 top2000.xlsx

ๅฆ‚ๆžœไฝ ไธๅ–œๆฌข่ฟ™ไธชๆ–‡ไปถๅ๏ผŒ้‚ฃไนˆไฝ ๅฏไปฅ้€‰ๆ‹ฉไฝฟ็”จ-o้€‰้กนๅ’Œไธ€ไธชๆ–‡ไปถๅๆฅไฟๅญ˜ๆ–‡ไปถ๏ผŒๆˆ–่€…ๅฐ†่พ“ๅ‡บ้‡ๅฎšๅ‘ๅˆฐไธ€ไธชๆ–ฐ็š„ๆ–‡ไปถ๏ผš

$ curl -s "https://en.wikipedia.org/wiki/List_of_windmills_in_Friesland" > fries
land.html

3.3.3 ๅ…ถไป–ๅ่ฎฎ

curlๆ€ปๅ…ฑๆ”ฏๆŒ 20 ๅคš็งๅ่ฎฎใ€‚ไปŽ FTP ๆœๅŠกๅ™จ๏ผˆไปฃ่กจๆ–‡ไปถไผ ่พ“ๅ่ฎฎ๏ผ‰ไธ‹่ฝฝๆ–‡ไปถๅŒๆ ทไนŸๅฏไปฅไฝฟ็”จcurl๏ผŒไธ‹้ขๆ˜พ็คบไปŽftp.gnu.orgไธ‹่ฝฝๆ–‡ไปถwelcome.msg:

$ curl -s "ftp://ftp.gnu.org/welcome.msg" | trim
NOTICE (Updated October 15 2021):

If you maintain scripts used to access ftp.gnu.org over FTP,
we strongly encourage you to change them to use HTTPS instead.

Eventually we hope to shut down FTP protocol access, but plan
to give notice here and other places for several months ahead
of time.

--
โ€ฆ with 19 more lines

ๅฆ‚ๆžœๆŒ‡ๅฎš็š„ URL ๆ˜ฏไธ€ไธช DICT ๅ่ฎฎ๏ผŒcurlๅฐ†ๅˆ—ๅ‡บ่ฏฅ็›ฎๅฝ•็š„ๅ†…ๅฎนใ€‚ๅฝ“ URL ๅ—ๅฏ†็ ไฟๆŠคๆ—ถ๏ผŒไฝ ๅฏไปฅไฝฟ็”จ-u้€‰้กนๆŒ‡ๅฎš็”จๆˆทๅๅ’Œๅฏ†็ ใ€‚DICT ๅ่ฎฎๅ…่ฎธไฝ ่ฎฟ้—ฎๅ„็งๅญ—ๅ…ธๅ’ŒๆŸฅๆ‰พๅฎšไน‰๏ผŒๆ นๆฎใ€Šๅ›ฝ้™…่‹ฑ่ฏญๅไฝœ่ฏๅ…ธใ€‹๏ผŒไธ‹้ขๆ˜ฏโ€œ้ฃŽ่ฝฆโ€็š„ๅฎšไน‰๏ผš

$ curl -s "dict://dict.org/d:windmill" | trim
220 dict.dict.org dictd 1.12.1/rf on Linux 4.19.0-10-amd64 <auth.mime> <9813708โ€ฆ
250 ok
150 1 definitions retrieved
151 "Windmill" gcide "The Collaborative International Dictionary of English v.0โ€ฆ
Windmill \Wind"mill`\, n.
   A mill operated by the power of the wind, usually by the
   action of the wind upon oblique vanes or sails which radiate
   from a horizontal shaft. --Chaucer.
   [1913 Webster]
.
โ€ฆ with 2 more lines

็„ถ่€Œ๏ผŒๅฝ“ไปŽไบ’่”็ฝ‘ไธ‹่ฝฝๆ•ฐๆฎๆ—ถ๏ผŒๅ่ฎฎๅพˆๅฏ่ƒฝๆ˜ฏ HTTP๏ผŒๅ› ๆญค URL ๅฐ†ไปฅhttp://ๆˆ–https://ๅผ€ๅคดใ€‚

3.3.4 ้‡ๅฎšๅ‘่ฎพ็ฝฎ

ๅฝ“ไฝ ่ฎฟ้—ฎไธ€ไธช็ผฉ็Ÿญ็š„็ฝ‘ๅ€ๆ—ถ๏ผŒๆฏ”ๅฆ‚ไปฅhttp://bit.ly/ๆˆ–http://t.co/ๅผ€ๅคด็š„็ฝ‘ๅ€๏ผŒไฝ ็š„ๆต่งˆๅ™จไผš่‡ชๅŠจๅฐ†ไฝ ้‡ๅฎšๅ‘ๅˆฐๆญฃ็กฎ็š„ไฝ็ฝฎใ€‚็„ถ่€Œ๏ผŒไฝฟ็”จcurl๏ผŒไฝ ้œ€่ฆๆŒ‡ๅฎš-Lๆˆ–--location้€‰้กนไปฅไพฟ่ขซ้‡ๅฎšๅ‘ใ€‚ๅฆ‚ๆžœๆฒกๆœ‰๏ผŒไฝ ๅฏ่ƒฝไผšๅพ—ๅˆฐ่ฟ™ๆ ท็š„็ป“ๆžœ๏ผš

$ curl -s "https://bit.ly/2XBxvwK"
<html>
<head><title>Bitly</title></head>
<body><a href="https://youtu.be/dQw4w9WgXcQ">moved here</a></body>
</html>%

ๆœ‰ๆ—ถๅ€™ไฝ ไป€ไนˆไนŸๅพ—ไธๅˆฐ๏ผŒๅฐฑๅƒๆˆ‘ไปฌๆŒ‰็…งไธŠ้ขๆๅˆฐ็š„็ฝ‘ๅ€๏ผš

$ curl -s "https://youtu.be/dQw4w9WgXcQ"

้€š่ฟ‡ๆŒ‡ๅฎš-Iๆˆ–--head้€‰้กน๏ผŒcurlๅช่Žทๅ–ๅ“ๅบ”็š„ HTTP ๅคด๏ผŒ่ฟ™ๅ…่ฎธไฝ ๆฃ€ๆŸฅๆœๅŠกๅ™จ่ฟ”ๅ›ž็š„็Šถๆ€ไปฃ็ ๅ’Œๅ…ถไป–ไฟกๆฏใ€‚

$ curl -sI "https://youtu.be/dQw4w9WgXcQ" | trim
HTTP/2 303
content-type: application/binary
x-content-type-options: nosniff
cache-control: no-cache, no-store, max-age=0, must-revalidate
pragma: no-cache
expires: Mon, 01 Jan 1990 00:00:00 GMT
date: Thu, 03 Mar 2022 09:41:56 GMT
location: https://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=youtu.be
content-length: 0
x-frame-options: SAMEORIGIN
โ€ฆ with 11 more lines

ไฟกๆฏไธญ็ฌฌไธ€่กŒๆ˜พ็คบไบ† HTTP ๅ่ฎฎๅ’Œ็Šถๆ€็ ๏ผŒๅœจๆœฌไพ‹ไธญๆ˜ฏ 303ใ€‚ไฝ ่ฟ˜ๅฏไปฅ็œ‹ๅˆฐ่ฏฅ URL ้‡ๅฎšๅ‘ๅˆฐ็š„ไฝ็ฝฎใ€‚ๅฆ‚ๆžœcurlๆฒกๆœ‰็ป™ไฝ ้ข„ๆœŸ็š„็ป“ๆžœ๏ผŒๆฃ€ๆŸฅๆ ‡้ข˜ๅนถ่Žทๅพ—็Šถๆ€็ ๆ˜ฏไธ€ไธชๆœ‰็”จ็š„่ฐƒ่ฏ•ๅทฅๅ…ทใ€‚ๅ…ถไป–ๅธธ่ง็š„ HTTP ็Šถๆ€ไปฃ็ ๅŒ…ๆ‹ฌ 404๏ผˆๆœชๆ‰พๅˆฐ๏ผ‰ๅ’Œ 403๏ผˆ็ฆๆญข๏ผ‰ใ€‚็ปดๅŸบ็™พ็ง‘ๅˆ—ๅ‡บไบ†ๆ‰€ๆœ‰ HTTP ็Šถๆ€็ ใ€‚

ๆ€ปไน‹๏ผŒcurlๆ˜ฏไธ€ไธชๆœ‰็”จ็š„ไปŽไบ’่”็ฝ‘ไธ‹่ฝฝๆ•ฐๆฎ็š„ๅ‘ฝไปค่กŒๅทฅๅ…ทใ€‚ๅฎƒ็š„ไธ‰ไธชๆœ€ๅธธ่ง็š„้€‰้กนๆ˜ฏ-sๅฟฝ็•ฅ่ฟ›ๅบฆๆกใ€-uๆŒ‡ๅฎš็”จๆˆทๅๅ’Œๅฏ†็ ใ€-L่‡ชๅŠจ่ทŸ้š้‡ๅฎšๅ‘ใ€‚่ฏทๅ‚้˜…ๅ…ถๆ‰‹ๅ†Œ้กตไบ†่งฃๆ›ดๅคšไฟกๆฏ๏ผš

$ man curl | trim 20
curl(1)                           Curl Manual                          curl(1)

NAME
       curl - transfer a URL

SYNOPSIS
       curl [options / URLs]

DESCRIPTION
       curl  is  a tool to transfer data from or to a server, using one of the
       supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS,  IMAP,
       IMAPS,  LDAP,  LDAPS,  MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP,
       SMB, SMBS, SMTP, SMTPS, TELNET and TFTP). The command  is  designed  to
       work without user interaction.

       curl offers a busload of useful tricks like proxy support, user authenโ€
       tication, FTP upload, HTTP post, SSL connections, cookies, file  transโ€
       fer  resume,  Metalink,  and more. As you will see below, the number of
       features will make your head spin!

โ€ฆ with 3986 more lines

3.4 ่งฃๅŽ‹ๆ–‡ไปถ

ๅฆ‚ๆžœๅŽŸๅง‹ๆ•ฐๆฎ้›†้žๅธธๅคง๏ผŒๆˆ–่€…ๅฎƒๆ˜ฏ่ฎธๅคšๆ–‡ไปถ็š„้›†ๅˆ๏ผŒๅˆ™่ฏฅๆ–‡ไปถๅฏ่ƒฝๆ˜ฏๅŽ‹็ผฉๆ–‡ไปถใ€‚ๅŒ…ๅซ่ฎธๅคš้‡ๅคๅ€ผ็š„ๆ•ฐๆฎ้›†๏ผˆๅฆ‚ๆ–‡ๆœฌๆ–‡ไปถไธญ็š„ๅ•่ฏๆˆ– JSON ๆ–‡ไปถไธญ็š„้”ฎ๏ผ‰็‰นๅˆซ้€‚ๅˆๅŽ‹็ผฉใ€‚

ๅŽ‹็ผฉๆ–‡ไปถๅธธ่ง็š„ๆ–‡ไปถๆ‰ฉๅฑ•ๅๆœ‰๏ผš.tar.gzใ€.zipๅ’Œ.rarใ€‚่ฆ่งฃๅŽ‹็ผฉ่ฟ™ไบ›ๆ–‡ไปถ๏ผŒไฝ ๅฏไปฅไฝฟ็”จๅ‘ฝไปค่กŒๅทฅๅ…ทtarใ€unzipๅ’Œunrarใ€‚๏ผˆๅฝ“็„ถ่ฟ˜ๆœ‰ไธ€ไบ›ไธๅคชๅธธ่ง็š„ๆ–‡ไปถๆ‰ฉๅฑ•ๅ๏ผŒ่ฟ™ไบ›ๅฏ่ƒฝ้œ€่ฆๅ…ถไป–ๅทฅๅ…ทๆฅๅค„็†ใ€‚๏ผ‰

่ฎฉๆˆ‘ไปฌไปฅtar.gz๏ผˆ่ฏปไฝœโ€œgzipped tarballโ€๏ผ‰ไธบไพ‹ใ€‚ไธบไบ†ๆๅ–ๅไธบlogs.tar.gz็š„ๆกฃๆกˆ๏ผŒไฝ ๅฐ†ไฝฟ็”จไปฅไธ‹ๅ‘ฝไปค่กŒ๏ผš

$ tar -xzf logs.tar.gz # โžŠ 

โžŠ ๅŽ‹็ผฉ็š„ๆ—ถๅ€™ๅฐ†xzf่ฟ™ไธ‰ไธช็Ÿญ้€‰้กน็ป„ๅˆๅœจไธ€่ตทๆ˜ฏๅพˆๅธธ่ง็š„๏ผŒๅฐฑๅƒๆˆ‘ๅœจ่ฟ™้‡Œๅš็š„ไธ€ๆ ทใ€‚ๅฝ“็„ถไฝ ไนŸๅฏไปฅๅฐ†ๅฎƒไปฌๅˆ†ๅˆซๆŒ‡ๅฎšไธบ-x -z -f๏ผŒไบ‹ๅฎžไธŠ๏ผŒ่ฎธๅคšๅ‘ฝไปคๅทฅๅ…ท้ƒฝๅ…่ฎธไฝ ็”ฑๅ•ไธชๅญ—็ฌฆ็ป„ๅˆๆˆ้€‰้กนใ€‚

tarๅ› ๅ…ถไผ—ๅคš็š„ๅ‘ฝไปค่กŒๅ‚ๆ•ฐ่€Œ่‡ญๅๆ˜ญ่‘—ใ€‚ๅœจ่ฟ™็งๆƒ…ๅ†ตไธ‹๏ผŒไธ‰ไธช้€‰้กน-xใ€-zๅ’Œ-f่กจๆ˜Žtarๅฐ†ไผš็”จgzipไฝœไธบ่งฃๅŽ‹็ผฉ็ฎ—ๆณ•ไปŽๅŽ‹็ผฉๆ–‡ไปถไธญๆๅ–ๆ–‡ไปถใ€‚

ไฝ†ๆ˜ฏ๏ผŒ็”ฑไบŽๆˆ‘ไปฌ่ฟ˜ไธ็†Ÿๆ‚‰่ฟ™ไธชๅŽ‹็ผฉๆ–‡ไปถ๏ผŒๆ‰€ไปฅๆœ€ๅฅฝๅ…ˆๆฃ€ๆŸฅไธ€ไธ‹ๅฎƒ็š„ๅ†…ๅฎน๏ผŒ่ฟ™ๅฏไปฅ้€š่ฟ‡-t้€‰้กน๏ผˆ่€Œไธๆ˜ฏ-x้€‰้กน๏ผ‰ๆฅๅฎŒๆˆ๏ผš

$ tar -tzf logs.tar.gz | trim
E1FOSPSAYDNUZI.2020-09-01-00.0dd00628
E1FOSPSAYDNUZI.2020-09-01-00.b717c457
E1FOSPSAYDNUZI.2020-09-01-01.05f904a4
E1FOSPSAYDNUZI.2020-09-01-02.36588daf
E1FOSPSAYDNUZI.2020-09-01-02.6cea8b1d
E1FOSPSAYDNUZI.2020-09-01-02.be4bc86d
E1FOSPSAYDNUZI.2020-09-01-03.16f3fa32
E1FOSPSAYDNUZI.2020-09-01-03.1c0a370f
E1FOSPSAYDNUZI.2020-09-01-03.76df64bf
E1FOSPSAYDNUZI.2020-09-01-04.0a1ade1b
โ€ฆ with 2427 more lines

่ฟ™ไธชๅŽ‹็ผฉๆ–‡ไปถไธญๅŒ…ๅซไบ†ๅพˆๅคšๆ–‡ไปถ๏ผŒๅนถไธ”ๅฎƒไปฌไธๅœจไธ€ไธช็›ฎๅฝ•ไธญ๏ผŒๅ› ๆญคไธบไบ†ไฟๆŒๅฝ“ๅ‰็›ฎๅฝ•็š„ๆ•ดๆด๏ผŒๆœ€ๅฅฝ้ฆ–ๅ…ˆไฝฟ็”จmkdirๅˆ›ๅปบไธ€ไธชๆ–ฐ็›ฎๅฝ•๏ผŒ็„ถๅŽไฝฟ็”จ-C้€‰้กนๆๅ–ๅ…ถไธญ็š„ๆ–‡ไปถใ€‚

$ mkdir logs

$ tar -xzf logs.tar.gz -C logs

่ฎฉๆˆ‘ไปฌๆฅ็œ‹ไธ€ไธ‹ๆ–‡ไปถ็š„ๆ•ฐ้‡ๅŠๅ…ถ้ƒจๅˆ†ๅ†…ๅฎน๏ผš

$ ls logs | wc -l
2437

$ cat logs/* | trim
#Version: 1.0
#Fields: date time x-edge-location sc-bytes c-ip cs-method cs(Host) cs-uri-stemโ€ฆ
2020-09-01      00:51:54        SEA19-C1        391     206.55.174.150  GET    โ€ฆ
2020-09-01      00:54:59        CPH50-C2        384     82.211.213.95   GET    โ€ฆ
#Version: 1.0
#Fields: date time x-edge-location sc-bytes c-ip cs-method cs(Host) cs-uri-stemโ€ฆ
2020-09-01      00:04:28        DFW50-C1        391     2a03:2880:11ff:9::face:โ€ฆ
#Version: 1.0
#Fields: date time x-edge-location sc-bytes c-ip cs-method cs(Host) cs-uri-stemโ€ฆ
2020-09-01      01:04:14        ATL56-C4        385     2600:1700:2760:da20:548โ€ฆ
โ€ฆ with 10279 more lines

้žๅธธๅฅฝใ€‚็Žฐๅœจ๏ผŒๆˆ‘็Ÿฅ้“ไฝ ๆƒณๆธ…็†ๅ’Œ็ ”็ฉถ่ฟ™ไบ›ๆ—ฅๅฟ—ๆ–‡ไปถ๏ผŒไฝ†้‚ฃๆ˜ฏไปฅๅŽๅœจ็ฌฌไบ”็ซ ๅ’Œ็ฌฌไธƒ็ซ ไธญ่ฎจ่ฎบ็š„ไบ‹ๆƒ…ใ€‚

้š็€ๆ—ถ้—ด็š„ๆŽจ็งป๏ผŒไฝ ไผšไน ๆƒฏ่ฟ™ไบ›้€‰้กน๏ผŒไฝ†ๆˆ‘ๆƒณ็ป™ไฝ ็œ‹ไธ€ไธชๆฏ”่พƒๆ–นไพฟ็š„ๆ›ฟไปฃ่„šๆœฌ๏ผŒๅฎƒไธ้œ€่ฆ่ฎฐไฝไธๅŒ็š„ๅ‘ฝไปค่กŒๅทฅๅ…ทๅ’Œๅฎƒไปฌ็š„้€‰้กน๏ผŒ่ฟ™ไธชๆ–นไพฟ็š„่„šๆœฌๅซๅšunpack๏ผŒๅฎƒๅฏไปฅ่งฃๅŽ‹็ผฉ่ฎธๅคšไธๅŒ็š„ๆ ผๅผใ€‚unpackๆŸฅ็œ‹ไฝ ๆƒณ่ฆ่งฃๅŽ‹็ผฉ็š„ๆ–‡ไปถ็š„ๆ‰ฉๅฑ•ๅ๏ผŒๅนถ่ฐƒ็”จ้€‚ๅฝ“็š„ๅ‘ฝไปค่กŒๅทฅๅ…ทใ€‚็Žฐๅœจ๏ผŒไธบไบ†่งฃๅŽ‹็ผฉ่ฟ™ไธชๆ–‡ไปถ๏ผŒไฝ ๅฏไปฅ่ฟ่กŒ๏ผš

$ unpack logs.tar.gz

3.5 ๅฐ† Microsoft Excel ็”ตๅญ่กจๆ ผ่ฝฌๆขไธบ CSV ๆ ผๅผ

ๅฏนไบŽ่ฎธๅคšไบบๆฅ่ฏด๏ผŒMicrosoft Excel ๆไพ›ไบ†ไธ€็ง็›ด่ง‚็š„ๆ–นๅผๆฅๅค„็†ๅฐๅž‹ๆ•ฐๆฎ้›†ๅนถๅฏนๅ…ถๆ‰ง่กŒ่ฎก็ฎ—ใ€‚ๅ› ๆญค๏ผŒๅคง้‡ๆ•ฐๆฎ่ขซๅตŒๅ…ฅๅˆฐ Microsoft Excel ็”ตๅญ่กจๆ ผไธญใ€‚ๆ นๆฎๆ–‡ไปถๅ็š„ๆ‰ฉๅฑ•ๅ๏ผŒ่ฟ™ไบ›็”ตๅญ่กจๆ ผ่ฆไนˆไปฅไธ“ๆœ‰็š„ไบŒ่ฟ›ๅˆถๆ ผๅผ๏ผˆ.xls๏ผ‰ๅญ˜ๅ‚จ๏ผŒ่ฆไนˆไปฅๅŽ‹็ผฉ็š„ XML ๆ–‡ไปถ็š„้›†ๅˆ๏ผˆ.xlsx๏ผ‰ๅญ˜ๅ‚จใ€‚ไฝ†่ฟ™ไธค็งๆƒ…ๅ†ตไธ‹้ƒฝไธๅˆฉไบŽๅคงๅคšๆ•ฐๅ‘ฝไปค่กŒๅทฅๅ…ทไฝฟ็”จ่ฟ™ไบ›ๆ•ฐๆฎใ€‚ๅฆ‚ๆžœไป…ไป…ๅ› ไธบ่ฟ™ไบ›ๆœ‰ไปทๅ€ผ็š„ๆ•ฐๆฎ้›†ไปฅ่ฟ™็งๆ–นๅผๅญ˜ๅ‚จ๏ผŒๆˆ‘ไปฌๅฐฑไธ่ƒฝไฝฟ็”จๅฎƒไปฌไบ†๏ผŒ้‚ฃ่ฟ™ๅฐ†ๆ˜ฏไธ€็ง่€ป่พฑใ€‚

็‰นๅˆซๆ˜ฏๅฝ“ไฝ ๅˆšๅผ€ๅง‹ไฝฟ็”จๅ‘ฝไปค่กŒๆ—ถ๏ผŒไฝ ๅฏ่ƒฝไผšๅฐ่ฏ•้€š่ฟ‡ๅœจ Microsoft Excel ๆˆ–ๅผ€ๆบ็‰ˆๆœฌ๏ผˆๅฆ‚ LibreOffice Calc๏ผ‰ไธญๆ‰“ๅผ€็”ตๅญ่กจๆ ผ๏ผŒ็„ถๅŽๆ‰‹ๅŠจๅฐ†ๅ…ถๅฏผๅ‡บไธบ CSV ๆ ผๅผ๏ผŒไปŽ่€Œๅฐ†็”ตๅญ่กจๆ ผ่ฝฌๆขไธบ CSV ๆ ผๅผใ€‚่™ฝ็„ถ่ฟ™ไนŸๆ˜ฏไธ€ไธช่งฃๅ†ณๆ–นๆกˆ๏ผŒไฝ†็ผบ็‚นๆ˜ฏๅฎƒไธ่ƒฝๅพˆๅฅฝๅœฐๆ‰ฉๅฑ•ๅˆฐๅคšไธชๆ–‡ไปถ๏ผŒๅนถไธ”ไธ่ƒฝ่‡ชๅŠจๅŒ–ใ€‚ๆญคๅค–๏ผŒๅฝ“ไฝ ๅœจๆœๅŠกๅ™จไธŠๅทฅไฝœๆ—ถ๏ผŒๅพˆๅฏ่ƒฝๆฒกๆœ‰่ฟ™ๆ ท็š„ๅบ”็”จๅฏ็”จใ€‚็›ธไฟกๆˆ‘๏ผŒๅ‘ฝไปค่กŒๆ˜ฏไธ€ไธชๆ›ดๅฅฝ็š„่งฃๅ†ณๆ–นๆกˆใ€‚

ๅนธ่ฟ็š„ๆ˜ฏ๏ผŒๆˆ‘ไปฌๆœ‰ไธ€ไธชๅไธบin2csv็š„ๅ‘ฝไปค่กŒๅทฅๅ…ท๏ผŒๅฎƒๅฏไปฅๅฐ† Microsoft Excel ็”ตๅญ่กจๆ ผ่ฝฌๆขๆˆ CSV ๆ–‡ไปถใ€‚CSV ๆŒ‡็š„ๆ˜ฏ้€—ๅทๅˆ†้š”็š„ๆ•ฐๅ€ผ๏ผŒไฝฟ็”จ CSV ๆ–‡ไปถๅฏ่ƒฝไผšๅพˆๆฃ˜ๆ‰‹๏ผŒๅ› ไธบๅฎƒ็ผบไนๆญฃๅผ็š„่ง„่Œƒใ€‚Yakov Shafranovich ๅฐ† CSV ๆ ผๅผๅฎšไน‰ไธบไปฅไธ‹ไธ‰็‚น๏ผš

  1. ๆฏๆก่ฎฐๅฝ•ไฝไบŽๅ•็‹ฌ็š„ไธ€่กŒ๏ผŒ็”ฑๆข่กŒ็ฌฆ๏ผˆLF๏ผ‰ๅˆ†้š”ใ€‚ไพ‹ๅฆ‚๏ผŒไธ‹้ข็š„ CSV ๆ–‡ไปถๅŒ…ๅซไบ†ๅ…ณไบŽๅฟ่€…็ฅž้พŸ็š„้‡่ฆไฟกๆฏ๏ผš
$ bat -A tmnt-basic.csv # โžŠ
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
       โ”‚ File: tmnt-basic.csv
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
   1   โ”‚ Leonardo,Leo,blue,twoยทninjakensโŠ
   2   โ”‚ Raphael,Raph,red,pairยทofยทsaiโŠ
   3   โ”‚ Michelangelo,MikeyยทorยทMike,orange,pairยทofยทnunchakuโŠ
   4   โ”‚ Donatello,DonnieยทorยทDon,purple,staffโŠ
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

โžŠ -A้€‰้กนไฝฟbatๆ˜พ็คบๆ‰€ๆœ‰ไธๅฏๆ‰“ๅฐ็š„ๅญ—็ฌฆ๏ผŒๅฆ‚็ฉบๆ ผใ€ๅˆถ่กจ็ฌฆๅ’Œๆข่กŒ็ฌฆใ€‚

  1. ๆ–‡ไปถไธญ็š„ๆœ€ๅŽไธ€ๆก่ฎฐๅฝ•ๅฏ่ƒฝๆœ‰ไนŸๅฏ่ƒฝๆฒกๆœ‰็ป“ๆŸๆข่กŒ็ฌฆ๏ผŒไพ‹ๅฆ‚๏ผš
$ bat -A tmnt-missing-newline.csv
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
       โ”‚ File: tmnt-missing-newline.csv
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
   1   โ”‚ Leonardo,Leo,blue,twoยทninjakensโŠ
   2   โ”‚ Raphael,Raph,red,pairยทofยทsaiโŠ
   3   โ”‚ Michelangelo,MikeyยทorยทMike,orange,pairยทofยทnunchakuโŠ
   4   โ”‚ Donatello,DonnieยทorยทDon,purple,staff
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  1. ๆ–‡ไปถ็š„็ฌฌไธ€่กŒๅฏ่ƒฝไผšๅ‡บ็Žฐไธ€ไธชๆ ‡้ข˜่กŒ๏ผŒๅ…ถๆ ผๅผไธŽๆ™ฎ้€š่ฎฐๅฝ•่กŒ็›ธๅŒใ€‚่ฏฅๆ ‡้ข˜ๅฐ†ๅŒ…ๅซไธŽๆ–‡ไปถไธญ็š„ๅญ—ๆฎต็›ธๅฏนๅบ”็š„ๅ็งฐ๏ผŒๅนถไธ”ๅบ”่ฏฅๅŒ…ๅซไธŽๆ–‡ไปถๅ…ถไฝ™้ƒจๅˆ†ไธญ็š„่ฎฐๅฝ•็›ธๅŒๆ•ฐ้‡็š„ๅญ—ๆฎตใ€‚ไพ‹ๅฆ‚๏ผš
$ bat -A tmnt-with-header.csv
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
       โ”‚ File: tmnt-with-header.csv
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
   1   โ”‚ name,nickname,mask_color,weaponโŠ
   2   โ”‚ Leonardo,Leo,blue,twoยทninjakensโŠ
   3   โ”‚ Raphael,Raph,red,pairยทofยทsaiโŠ
   4   โ”‚ Michelangelo,MikeyยทorยทMike,orange,pairยทofยทnunchakuโŠ
   5   โ”‚ Donatello,DonnieยทorยทDon,purple,staffโŠ
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

ๅฆ‚ไฝ ๆ‰€่ง๏ผŒ้ป˜่ฎคๆƒ…ๅ†ตไธ‹๏ผŒCSV ไธๅคชๅฏ่ฏปใ€‚ไฝ ๅฏไปฅ้€š่ฟ‡็ฎก้“ๅฐ†ๆ•ฐๆฎไผ ่พ“ๅˆฐไธ€ไธชๅไธบcsvlook็š„ๅทฅๅ…ท๏ผŒๅฎƒไผšๅพˆๅฅฝๅœฐๅฐ†ๆ•ฐๆฎๆ ผๅผๅŒ–ๆˆ่กจๆ ผใ€‚ๅฆ‚ๆžœ CSV ๆ•ฐๆฎๆฒกๆœ‰ๅคด๏ผŒๆฏ”ๅฆ‚tmnt-missing-newline.csv๏ผŒ้‚ฃไนˆไฝ ้œ€่ฆๆทปๅŠ -H้€‰้กน๏ผŒๅฆๅˆ™็ฌฌไธ€่กŒๅฐ†่ขซ่งฃ้‡Šไธบๅคดใ€‚

$ csvlook tmnt-with-header.csv
โ”‚ name         โ”‚ nickname      โ”‚ mask_color โ”‚ weapon           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Leonardo     โ”‚ Leo           โ”‚ blue       โ”‚ two ninjakens    โ”‚
โ”‚ Raphael      โ”‚ Raph          โ”‚ red        โ”‚ pair of sai      โ”‚
โ”‚ Michelangelo โ”‚ Mikey or Mike โ”‚ orange     โ”‚ pair of nunchaku โ”‚
โ”‚ Donatello    โ”‚ Donnie or Don โ”‚ purple     โ”‚ staff            โ”‚

$ csvlook tmnt-basic.csv
โ”‚ Leonardo     โ”‚ Leo           โ”‚ blue   โ”‚ two ninjakens    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Raphael      โ”‚ Raph          โ”‚ red    โ”‚ pair of sai      โ”‚
โ”‚ Michelangelo โ”‚ Mikey or Mike โ”‚ orange โ”‚ pair of nunchaku โ”‚
โ”‚ Donatello    โ”‚ Donnie or Don โ”‚ purple โ”‚ staff            โ”‚

$ csvlook -H tmnt-missing-newline.csv # โžŠ
โ”‚ a            โ”‚ b             โ”‚ c      โ”‚ d                โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Leonardo     โ”‚ Leo           โ”‚ blue   โ”‚ two ninjakens    โ”‚
โ”‚ Raphael      โ”‚ Raph          โ”‚ red    โ”‚ pair of sai      โ”‚
โ”‚ Michelangelo โ”‚ Mikey or Mike โ”‚ orange โ”‚ pair of nunchaku โ”‚
โ”‚ Donatello    โ”‚ Donnie or Don โ”‚ purple โ”‚ staff            โ”‚

โžŠ -H้€‰้กน่กจ็คบ CSV ๆ–‡ไปถไธญๆฒกๆœ‰ๆ ‡้ข˜่กŒใ€‚

่ฎฉๆˆ‘ไปฌ็”จไธ€ไธช็”ตๅญ่กจๆ ผๆฅๆผ”็คบไธ€ไธ‹in2csv๏ผŒ่ฟ™ไธช่กจๆ ผๅŒ…ๅซไบ†ไธ€ๅนดไธ€ๅบฆ็š„่ทๅ…ฐ้ฉฌๆ‹‰ๆพๅนฟๆ’ญ่Š‚็›ฎ 2000 ๅผบไธญ 2000 ้ฆ–ๆœ€ๆต่กŒ็š„ๆญŒๆ›ฒใ€‚่ฆๆๅ–ๅฎƒ็š„ๆ•ฐๆฎ๏ผŒไฝ ๅฏไปฅๅฆ‚ไธ‹่ฐƒ็”จin2csv:

$ in2csv top2000.xlsx | tee top2000.csv | trim
NR.,ARTIEST,TITEL,JAAR
1,Danny Vera,Roller Coaster,2019
2,Queen,Bohemian Rhapsody,1975
3,Eagles,Hotel California,1977
4,Billy Joel,Piano Man,1974
5,Led Zeppelin,Stairway To Heaven,1971
6,Pearl Jam,Black,1992
7,Boudewijn de Groot,Avond,1997
8,Coldplay,Fix You,2005
9,Pink Floyd,Wish You Were Here,1975
โ€ฆ with 1991 more lines

Danny Vera ๆ˜ฏ่ฐ๏ผŸๅฝ“็„ถ๏ผŒๆœ€ๅ—ๆฌข่ฟŽ็š„ๆญŒๆ›ฒๅบ”่ฏฅๆ˜ฏๆณข่ฅฟ็ฑณไบš็‹‚ๆƒณๆ›ฒใ€‚ๅ—ฏ๏ผŒ่‡ณๅฐ‘ Queen ๅœจๅ‰ 2000 ๅไธญๅ‡บ็Žฐไบ†ๅพˆๅคšๆฌก๏ผŒๆ‰€ไปฅๆˆ‘ไนŸไธๅบ”่ฏฅๆŠฑๆ€จ๏ผš

$ csvgrep top2000.csv --columns ARTIEST --regex '^Queen$' | csvlook -I # โžŠ
โ”‚ NR.  โ”‚ ARTIEST โ”‚ TITEL                           โ”‚ JAAR โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 2    โ”‚ Queen   โ”‚ Bohemian Rhapsody               โ”‚ 1975 โ”‚
โ”‚ 11   โ”‚ Queen   โ”‚ Love Of My Life                 โ”‚ 1975 โ”‚
โ”‚ 46   โ”‚ Queen   โ”‚ Innuendo                        โ”‚ 1991 โ”‚
โ”‚ 55   โ”‚ Queen   โ”‚ Don't Stop Me Now               โ”‚ 1979 โ”‚
โ”‚ 70   โ”‚ Queen   โ”‚ Somebody To Love                โ”‚ 1976 โ”‚
โ”‚ 85   โ”‚ Queen   โ”‚ Who Wants To Live Forever       โ”‚ 1986 โ”‚
โ”‚ 89   โ”‚ Queen   โ”‚ The Show Must Go On             โ”‚ 1991 โ”‚
โ”‚ 131  โ”‚ Queen   โ”‚ Killer Queen                    โ”‚ 1974 โ”‚
โ€ฆ with 24 more lines

โžŠ --regex้€‰้กนๅŽ็š„ๅ€ผๆ˜ฏไธ€ไธชๆญฃๅˆ™่กจ่พพๅผ๏ผˆๆˆ– regex๏ผ‰ใ€‚่ฟ™ๆ˜ฏไธ€็งๅฎšไน‰ๆจกๅผ็š„็‰นๆฎŠ่ฏญๆณ•ใ€‚ๅ› ไธบๆˆ‘ๅชๆƒณๅŒน้…ไธŽQueenๅฎŒๅ…จๅŒน้…็š„่‰บๆœฏๅฎถ๏ผŒๆ‰€ไปฅๆˆ‘ไฝฟ็”จๆ’ๅ…ฅ็ฌฆๅท๏ผˆ^๏ผ‰ๅ’Œ็พŽๅ…ƒ็ฌฆๅท๏ผˆ$๏ผ‰ๆฅๅŒน้…ๅˆ—ARTIESTไธญๅ€ผ็š„ๅผ€ๅง‹ๅ’Œ็ป“ๆŸใ€‚

้กบไพฟ่ฏดไธ€ไธ‹๏ผŒๅทฅๅ…ทin2csvใ€csvgrepๅ’Œcsvlook้ƒฝๆ˜ฏ CSVkit ็š„ไธ€้ƒจๅˆ†๏ผŒCSVkit ๆ˜ฏๅค„็† CSV ๆ•ฐๆฎ็š„ๅ‘ฝไปค่กŒๅทฅๅ…ท็š„้›†ๅˆใ€‚

ๆ–‡ไปถ็š„ๆ ผๅผๆ˜ฏ็”ฑๆ‰ฉๅฑ•ๅ่‡ชๅŠจๅ†ณๅฎš็š„๏ผŒๆœฌไพ‹ไธญๆ˜ฏ.xlsxใ€‚ๅฆ‚ๆžœไฝ ่ฆๅฐ†ๆ•ฐๆฎๅฏผๅ…ฅin2csv๏ผŒไฝ ๅฟ…้กปๆ˜Ž็กฎๆŒ‡ๅฎšๆ ผๅผใ€‚

ไธ€ไธช็”ตๅญ่กจๆ ผๅฏไปฅๅŒ…ๅซๅคšไธชๅทฅไฝœ่กจใ€‚้ป˜่ฎคๆƒ…ๅ†ตไธ‹๏ผŒin2csvๆๅ–็ฌฌไธ€ไธชๅทฅไฝœ่กจใ€‚ๅฆ‚ๆžœ่ฆๆๅ–ไธๅŒ็š„ๅทฅไฝœ่กจ๏ผŒ้‚ฃไนˆ้œ€่ฆๅฐ†ๅทฅไฝœ่กจ็š„ๅ็งฐไผ ้€’็ป™--sheet้€‰้กนใ€‚ๅฆ‚ๆžœไฝ ไธ็กฎๅฎšๅทฅไฝœ่กจๅซไป€ไนˆ๏ผŒไฝ ๅฏไปฅไฝฟ็”จ--names้€‰้กนๆŸฅ็œ‹๏ผŒๅฎƒไผšๆ‰“ๅฐๅ‡บๆ‰€ๆœ‰ๅทฅไฝœ่กจ็š„ๅ็งฐใ€‚่ฟ™้‡Œๆˆ‘ไปฌ็œ‹ๅˆฐtop2000.xlsxๅชๆœ‰ไธ€ๅผ ่กจ๏ผŒๅไธบBlad1๏ผˆ่ทๅ…ฐ่ฏญ๏ผŒๆ„ๆ€ๆ˜ฏSheet1๏ผ‰ใ€‚

$ in2csv --names top2000.xlsx
Blad1

3.6 ๆŸฅ่ฏขๅ…ณ็ณปๆ•ฐๆฎๅบ“

่ฎธๅคšๅ…ฌๅธๅฐ†ไป–ไปฌ็š„ๆ•ฐๆฎๅญ˜ๅ‚จๅœจๅ…ณ็ณปๆ•ฐๆฎๅบ“ไธญใ€‚ๅฐฑๅƒ็”ตๅญ่กจๆ ผไธ€ๆ ท๏ผŒๅฆ‚ๆžœๆˆ‘ไปฌๅฏไปฅไปŽๅ‘ฝไปค่กŒ่Žทๅพ—่ฟ™ไบ›ๆ•ฐๆฎ๏ผŒ้‚ฃๅฐฑๅคชๅฅฝไบ†ใ€‚

ๅ…ณ็ณปๆ•ฐๆฎๅบ“็š„ไพ‹ๅญๆœ‰ MySQLใ€PostgreSQL ๅ’Œ SQLiteใ€‚่ฟ™ไบ›ๆ•ฐๆฎๅบ“็š„ๆŽฅๅฃๆ–นๅผ็จๅพฎๆœ‰ไบ›ไธๅŒใ€‚ๆœ‰ไบ›ๆไพ›ๅ‘ฝไปค่กŒๅทฅๅ…ทๆˆ–ๅ‘ฝไปค่กŒ็•Œ้ข๏ผŒๆœ‰ไบ›ๅˆ™ไธๆไพ›ใ€‚ๆญคๅค–๏ผŒๅฝ“ๆถ‰ๅŠๅˆฐๅฎƒไปฌ็š„ไฝฟ็”จๅ’Œ่พ“ๅ‡บๆ—ถ๏ผŒๆ ผๅผไธๆ˜ฏๅพˆไธ€่‡ดใ€‚

ๅนธ่ฟ็š„ๆ˜ฏ๏ผŒๆœ‰ไธ€ไธชๅไธบsql2csv็š„ๅ‘ฝไปค่กŒๅทฅๅ…ทไธ“้—จ็”จๆฅๅš่ฟ™ไธชไบ‹๏ผŒๅฎƒไนŸๆ˜ฏ CSVkit ็š„ไธ€้ƒจๅˆ†ใ€‚ๅฎƒ้€š่ฟ‡ไธ€ไธชๅ…ฌๅ…ฑๆŽฅๅฃไธŽ่ฎธๅคšไธๅŒ็š„ๆ•ฐๆฎๅบ“ๅๅŒๅทฅไฝœ๏ผŒๅŒ…ๆ‹ฌ MySQLใ€Oracleใ€PostgreSQLใ€SQLiteใ€Microsoft SQL Server ๅ’Œ Sybaseใ€‚sql2csv็š„่พ“ๅ‡บ๏ผŒ้กพๅๆ€ไน‰๏ผŒๅฐฑๆ˜ฏ CSV ๆ ผๅผ็š„ใ€‚

ๆˆ‘ไปฌๅฏไปฅ้€š่ฟ‡ๅฏนๅ…ณ็ณปๆ•ฐๆฎๅบ“ๆ‰ง่กŒSELECTๆŸฅ่ฏขๆฅ่Žทๅ–ๆ•ฐๆฎใ€‚๏ผˆsql2csvไนŸๆ”ฏๆŒINSERTใ€UPDATEๅ’ŒDELETEๆŸฅ่ฏข๏ผŒไฝ†่ฟ™ไธๆ˜ฏๆœฌ็ซ ็š„็›ฎ็š„ใ€‚๏ผ‰

sql2csv้œ€่ฆไธคไธชๅ‚ๆ•ฐ๏ผš--db๏ผŒๆŒ‡ๅฎšๆ•ฐๆฎๅบ“ URL๏ผŒๅฝขๅผไธ€่ˆฌๆ˜ฏ๏ผšdialect+driver://username:password@host:port/database๏ผ›--query๏ผŒๅŒ…ๅซSELECTๆŸฅ่ฏขใ€‚ไพ‹ๅฆ‚๏ผŒๆŒ‡ๅฎšไธ€ไธชๅŒ…ๅซๆฅ่‡ช R ็š„ๆ ‡ๅ‡†ๆ•ฐๆฎ้›†็š„ SQLite ๆ•ฐๆฎๅบ“๏ผŒๆˆ‘ๅฏไปฅไปŽ่กจmtcarsไธญ้€‰ๆ‹ฉๆ‰€ๆœ‰่กŒ๏ผŒๅนถๆŒ‰mpgๅˆ—ๅฏนๅฎƒไปฌ่ฟ›่กŒๆŽ’ๅบ๏ผŒๅฆ‚ไธ‹ๆ‰€็คบ๏ผš

$ sql2csv --db 'sqlite:///r-datasets.db' \
> --query 'SELECT row_names AS car, mpg FROM mtcars ORDER BY mpg' | csvlook
โ”‚ car                 โ”‚  mpg โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Cadillac Fleetwood  โ”‚ 10.4 โ”‚
โ”‚ Lincoln Continental โ”‚ 10.4 โ”‚
โ”‚ Camaro Z28          โ”‚ 13.3 โ”‚
โ”‚ Duster 360          โ”‚ 14.3 โ”‚
โ”‚ Chrysler Imperial   โ”‚ 14.7 โ”‚
โ”‚ Maserati Bora       โ”‚ 15.0 โ”‚
โ”‚ Merc 450SLC         โ”‚ 15.2 โ”‚
โ”‚ AMC Javelin         โ”‚ 15.2 โ”‚
โ€ฆ with 24 more lines

่ฟ™ไธชไพ‹ๅญไธญ SQLite ๆ•ฐๆฎๅบ“ๆ˜ฏไธ€ไธชๆœฌๅœฐๆ–‡ไปถ๏ผŒๆ‰€ไปฅๅœจ่ฟ™้‡Œๆˆ‘ไธ้œ€่ฆๆŒ‡ๅฎšไปปไฝ•็”จๆˆทๅใ€ๅฏ†็ ๆˆ–ไธปๆœบใ€‚ๅฆ‚ๆžœไฝ ๆƒณๆŸฅ่ฏขไฝ ้›‡ไธป็š„ๆ•ฐๆฎๅบ“๏ผŒไฝ ๅฝ“็„ถ้œ€่ฆ็Ÿฅ้“ๅฆ‚ไฝ•่ฎฟ้—ฎๅฎƒ๏ผŒๅนถไธ”ไฝ ้œ€่ฆๅพ—ๅˆฐๆƒ้™ใ€‚

3.7 ่ฐƒ็”จ Web API

ๅœจไธŠไธ€่Š‚ไธญ๏ผŒๆˆ‘่งฃ้‡Šไบ†ๅฆ‚ไฝ•ไปŽไบ’่”็ฝ‘ไธŠไธ‹่ฝฝๆ–‡ไปถใ€‚ไปŽไบ’่”็ฝ‘ไธŠๆ‹ฟๆ•ฐๆฎ็š„ๅฆไธ€็งๆ–นๅผๆ˜ฏ้€š่ฟ‡ Web API๏ผŒๅฎƒไปฃ่กจๅบ”็”จ็ผ–็จ‹ๆŽฅๅฃ๏ผŒAPI ๆ•ฐ้‡ๆญฃๅœจไปฅ่ถŠๆฅ่ถŠๅฟซ็š„้€Ÿๅบฆๅขž้•ฟ๏ผŒ่ฟ™ๅฏนๆˆ‘ไปฌๆ•ฐๆฎ็ง‘ๅญฆๅฎถๆฅ่ฏดๆ„ๅ‘ณ็€ๅคง้‡ๆœ‰่ถฃ็š„ๆ•ฐๆฎใ€‚

Web API ๅนถไธๆ„ๅ‘ณ็€่ฆไปฅๆผ‚ไบฎ็š„ๅธƒๅฑ€ๅ‘ˆ็Žฐ๏ผŒๆฏ”ๅฆ‚็ฝ‘็ซ™ใ€‚็›ธๅ๏ผŒๅคงๅคšๆ•ฐ Web API ไปฅ็ป“ๆž„ๅŒ–ๆ ผๅผ่ฟ”ๅ›žๆ•ฐๆฎ๏ผŒๆฏ”ๅฆ‚ JSON ๆˆ– XMLใ€‚ไปฅ็ป“ๆž„ๅŒ–็š„ๅฝขๅผไฟๅญ˜ๆ•ฐๆฎ็š„ๅฅฝๅค„ๆ˜ฏๆ•ฐๆฎๅฏไปฅๅพˆๅฎนๆ˜“ๅœฐ่ขซๅ…ถไป–ๅทฅๅ…ทๅค„็†๏ผŒๆฏ”ๅฆ‚jqใ€‚ไพ‹ๅฆ‚๏ผŒไพ‹ๅญไธญ็š„ API ๅŒ…ๅซๅคง้‡ๅ…ณไบŽ George R.R. Martin ่™šๆž„็š„ไธ–็•Œ็š„ไฟกๆฏ๏ผŒ่€Œใ€ŠๆƒๅŠ›็š„ๆธธๆˆใ€‹ไธ€ไนฆๅ’Œ็”ต่ง†ๅ‰งๅฐฑๅ‘็”Ÿๅœจ่ฟ™ไธช่™šๆž„ไธ–็•Œไธญ๏ผŒๅฎƒไปฅไธ‹้ข็š„ JSON ็ป“ๆž„่ฟ”ๅ›žๆ•ฐๆฎ๏ผš

$ curl -s "https://anapioficeandfire.com/api/characters/583" | jq '.'
{
  "url": "https://anapioficeandfire.com/api/characters/583",
  "name": "Jon Snow",
  "gender": "Male",
  "culture": "Northmen",
  "born": "In 283 AC",
  "died": "", # โžŠ
  "titles": [
  "Lord Commander of the Night's Watch"
 ],
  "aliases": [
  "Lord Snow",
  "Ned Stark's Bastard",
  "The Snow of Winterfell",
  "The Crow-Come-Over",
  "The 998th Lord Commander of the Night's Watch",
  "The Bastard of Winterfell",
  "The Black Bastard of the Wall",
  "Lord Crow"
 ],
  "father": "",
  "mother": "",
  "spouse": "",
  "allegiances": [
  "https://anapioficeandfire.com/api/houses/362"
 ],
  "books": [
  "https://anapioficeandfire.com/api/books/5"
 ],
  "povBooks": [
  "https://anapioficeandfire.com/api/books/1",
  "https://anapioficeandfire.com/api/books/2",
  "https://anapioficeandfire.com/api/books/3",
  "https://anapioficeandfire.com/api/books/8"
 ],
  "tvSeries": [
  "Season 1",
  "Season 2",
  "Season 3",
  "Season 4",
  "Season 5",
  "Season 6"
 ],
  "playedBy": [
  "Kit Harington"
 ]
}

โžŠ ๅ‰ง้€๏ผš่ฟ™ไธชๆ•ฐๆฎๅนถไธๅฎŒๅ…จๆ˜ฏๆœ€ๆ–ฐ็š„ใ€‚

ๆ•ฐๆฎ้€š่ฟ‡็ฎก้“ไผ ่พ“ๅˆฐๅ‘ฝไปค่กŒๅทฅๅ…ทjq๏ผŒ่ฟ™ๅชๆ˜ฏไธบไบ†ไปฅไธ€็งๆผ‚ไบฎ็š„ๆ–นๅผๆ˜พ็คบๅฎƒใ€‚jqๆœ‰ๆ›ดๅคšๆธ…็†ๅ’ŒๆŽข็ดข็š„ๅฏ่ƒฝๆ€ง๏ผŒๆˆ‘ไปฌๅฐ†ๅœจ็ฌฌไบ”็ซ ๅ’Œ็ฌฌไธƒ็ซ ไธญๆŽข็ดขใ€‚

3.7.1 ่ฎค่ฏ

ไธ€ไบ› Web API ่ฆๆฑ‚ไฝ ๅœจ่ฏทๆฑ‚ๅฎƒไปฌ็š„่พ“ๅ‡บไน‹ๅ‰่ฟ›่กŒ่บซไปฝ้ชŒ่ฏ๏ผˆๅณ่ฏๆ˜Žไฝ ็š„่บซไปฝ๏ผ‰ใ€‚ๆœ‰ๅ‡ ็งๆ–นๆณ•ๅฏไปฅๅšๅˆฐ่ฟ™ไธ€็‚นใ€‚ไธ€ไบ› Web API ไฝฟ็”จ API ๅฏ†ๅŒ™๏ผŒ่€Œๅฆไธ€ไบ›ไฝฟ็”จ OAuth ๅ่ฎฎใ€‚ๅœจ่ฟ™้‡Œ๏ผŒNews API๏ผŒไธ€ไธช็‹ฌ็ซ‹็š„ๆ ‡้ข˜ๅ’Œๆ–ฐ้—ปๆ–‡็ซ ๆฅๆบ๏ผŒๅฐฑๆ˜ฏไธ€ไธชๅพˆๅฅฝ็š„ไพ‹ๅญใ€‚่ฎฉๆˆ‘ไปฌ็œ‹็œ‹ๅฝ“ไฝ ่ฏ•ๅ›พๅœจๆฒกๆœ‰ API ้”ฎ็š„ๆƒ…ๅ†ตไธ‹่ฎฟ้—ฎ่ฟ™ไธช API ๆ—ถไผšๅ‘็”Ÿไป€ไนˆ๏ผš

$ curl -s "http://newsapi.org/v2/everything?q=linux" | jq .
{
  "status": "error", "code": "apiKeyMissing",
  "message": "Your API key is missing. Append this to the URL with the apiKey pa
ram, or use the x-api-key HTTP header."
}

ๅ—ฏ๏ผŒ้‚ฃๆ˜ฏๆ„ๆ–™ไน‹ไธญ็š„ใ€‚้กบไพฟ่ฏดไธ€ไธ‹๏ผŒ้—ฎๅทๅŽ้ข็š„้ƒจๅˆ†ๆ˜ฏๆˆ‘ไปฌไผ ้€’ๆŸฅ่ฏขๅ‚ๆ•ฐ็š„ๅœฐๆ–น๏ผŒ่ฟ™ไนŸๆ˜ฏไฝ ้œ€่ฆๆŒ‡ๅฎš API ๅฏ†ๅŒ™็š„ๅœฐๆ–นใ€‚ไฝ†ๆ˜ฏๆˆ‘ๆƒณๅฏน่‡ชๅทฑ็š„ API ๅฏ†ๅŒ™ไฟๅฏ†๏ผŒๆ‰€ไปฅๆˆ‘้€š่ฟ‡่ฏปๅ–ๆ–‡ไปถ็š„ๆ–นๅผๅฐ†ไฟกๆฏๆ’ๅ…ฅ่ฟ›ๅŽปใ€‚

$ curl -s "http://newsapi.org/v2/everything?q=linux&apiKey=$(< /data/.secret/new
sapi.org_apikey)" |
> jq '.' | trim 30
{
  "status": "ok",
  "totalResults": 9178,
  "articles": [
    {
      "source": {
        "id": "the-verge",
        "name": "The Verge"
      },
      "author": "Sean Hollister",
      "title": "Bungie rejects Steam Deck, threatens to ban Destiny 2 players tโ€ฆ
      "description": "Not only is Bungie apparently not making Destiny 2 compatโ€ฆ
      "url": "https://www.theverge.com/22957294/bungie-destiny-2-steam-deck-gamโ€ฆ
      "urlToImage": "https://cdn.vox-cdn.com/thumbor/PTFqHfu8ezNz4QrLf_ugVteHNVโ€ฆ
      "publishedAt": "2022-03-01T23:45:56Z",
      "content": "Image: Bungie\r\n\n \n\n When will Bungie let Destiny 2 come โ€ฆ
    },
    {
      "source": {
        "id": "ars-technica",
        "name": "Ars Technica"
      },
      "author": "Scharon Harding",
      "title": "System76 Linux workstation looks ready for gaming, too",
      "description": "A 144 Hz screen, colorful keyboard, and Ethernet can appeโ€ฆ
      "url": "https://arstechnica.com/gadgets/2022/02/system76-linux-laptop-uniโ€ฆ
      "urlToImage": "https://cdn.arstechnica.net/wp-content/uploads/2022/02/lisโ€ฆ
      "publishedAt": "2022-02-03T16:49:47Z",
      "content": "13 with 13 posters participating\r\nSystem76's latest Linux lโ€ฆ
    },
โ€ฆ with 236 more lines

ไฝ ๅฏไปฅๅœจ News API ็š„็ฝ‘็ซ™่Žทๅพ—่‡ชๅทฑ็š„ API ๅฏ†ๅŒ™ใ€‚

3.7.2 ๆตๅผ API

ไธ€ไบ› Web API ไปฅๆต็š„ๆ–นๅผ่ฟ”ๅ›žๆ•ฐๆฎใ€‚่ฟ™ๆ„ๅ‘ณ็€ไธ€ๆ—ฆไฝ ่ฟžๆŽฅๅˆฐๅฎƒ๏ผŒๆ•ฐๆฎๅฐ†็ปง็ปญๆถŒๅ…ฅ๏ผŒ็›ดๅˆฐ่ฟžๆŽฅ่ขซๅ…ณ้—ญใ€‚ไธ€ไธชไผ—ๆ‰€ๅ‘จ็Ÿฅ็š„ไพ‹ๅญๆ˜ฏ Twitter โ€œfire hoseโ€๏ผŒๅฎƒไธๆ–ญๅœฐๅ‘ไธ–็•Œๅ„ๅœฐๅ‘้€ๆ‰€ๆœ‰็š„ๆŽจๆ–‡ใ€‚ๅนธ่ฟ็š„ๆ˜ฏ๏ผŒๅคงๅคšๆ•ฐๅ‘ฝไปค่กŒๅทฅๅ…ทไนŸไปฅๆตๆ–นๅผ่ฟ่กŒใ€‚

ไพ‹ๅฆ‚๏ผŒ่ฎฉๆˆ‘ไปฌๆฅ็œ‹ไธ€ไธช 10 ็ง’้’Ÿ็š„ Wikimedia ๆตๅช’ไฝ“ API ็คบไพ‹๏ผš

$ curl -s "https://stream.wikimedia.org/v2/stream/recentchange" |
> sample -s 10 > wikimedia-stream-sample

่ฟ™ไธช็‰นๅฎš็š„ API ่ฟ”ๅ›žๅฏน Wikipedia ๅ’Œ Wikimedia ็š„ๅ…ถไป–ๅฑžๆ€งๆ‰€ๅš็š„ๆ‰€ๆœ‰ๆ›ดๆ”นใ€‚ๅ‘ฝไปค่กŒๅทฅๅ…ทsample็”จไบŽๅœจ 10 ็ง’ๅŽๅ…ณ้—ญ่ฟžๆŽฅ๏ผŒๆˆ‘ไปฌไนŸๅฏไปฅ้€š่ฟ‡ๆŒ‰ไธ‹Ctrl-Cๅ‘้€ไธญๆ–ญๆฅๆ‰‹ๅŠจๅ…ณ้—ญ่ฟžๆŽฅใ€‚่พ“ๅ‡บ่ขซไฟๅญ˜ๅˆฐๆ–‡ไปถwikimedia-stream-sample๏ผŒ่ฎฉๆˆ‘ไปฌ็”จtrimๆฅไธ€็ชฅ็ฉถ็ซŸ๏ผš

$ < wikimedia-stream-sample trim
:ok

event: message
id: [{"topic":"eqiad.mediawiki.recentchange","partition":0,"timestamp":16101133โ€ฆ
data: {"$schema":"/mediawiki/recentchange/1.0.0","meta":{"uri":"https://en.wikiโ€ฆ

event: message
id: [{"topic":"eqiad.mediawiki.recentchange","partition":0,"timestamp":16101133โ€ฆ
data: {"$schema":"/mediawiki/recentchange/1.0.0","meta":{"uri":"https://www.wikโ€ฆ

โ€ฆ with 1078 more lines

้€š่ฟ‡sedๅ’Œjq๏ผŒๆˆ‘ไปฌๅฐฑๅฏไปฅๆธ…็†่ฟ™ไบ›ๆ•ฐๆฎ๏ผŒไปŽ่€Œ็œ‹ๅˆฐ่‹ฑๆ–‡็‰ˆ็ปดๅŸบ็™พ็ง‘ๅ‘็”Ÿ็š„ๅ˜ๅŒ–๏ผš

$ < wikimedia-stream-sample sed -n 's/^data: //p' | # โžŠ
> jq 'select(.type == "edit" and .server_name == "en.wikipedia.org") | .title' # โž‹
"Odion Ighalo"
"Hold Up (song)"
"Talk:Royal Bermuda Yacht Club"
"Jenna Ushkowitz"
"List of films released by Yash Raj Films"
"SP.A"
"Odette (musician)"
"Talk:Pierre Avoi"
"User:Curlymanjaro/sandbox3"
"List of countries by electrification rate"
"Grieg (crater)"
"Gorman, Edmonton"
"Khabza"
"QAnon"
"Khaw Boon Wan"
"Draft:Oggy and the Cockroaches (1975 TV series)"
"Renzo Reggiardo"
"Greer, Arizona"
"National Curriculum for England"
"Mod DB"
"Jordanian Pro League"
"List of foreign Serie A players"

โžŠ ่ฟ™ไธชsed่กจ่พพๅผ่กจ็คบๅชๆ‰“ๅฐไปฅdata:ๅผ€ๅคด็š„่กŒ๏ผŒๆ‰“ๅฐๅˆ†ๅทๅŽ็š„้ƒจๅˆ†๏ผŒๆฐๅฅฝๆ˜ฏ JSONใ€‚

โž‹ ่ฟ™ไธชjq่กจ่พพๅผๆ‰“ๅฐๅ…ทๆœ‰ๆŸไธชtypeๅ’Œserver_name็š„ JSON ๅฏน่ฑก็š„title้”ฎใ€‚

่ฏดๅˆฐๆตๅช’ไฝ“๏ผŒไฝ ็Ÿฅ้“ไฝ ๅฏไปฅไฝฟ็”จtelnetๅ…่ดนๆ’ญๆ”พใ€Šๆ˜Ÿ็ƒๅคงๆˆ˜๏ผš็ฌฌๅ››้›†โ€”โ€”ๆ–ฐ็š„ๅธŒๆœ›ใ€‹ๅ—๏ผŸ

$ telnet towel.blinkenlights.nl

่ฟ‡ไบ†ไธ€ไผšๅ„ฟ๏ผŒๆˆ‘ไปฌ็œ‹ๅˆฐ Han Solo ๅ…ˆๅผ€ๆžชไบ†๏ผ

                       -===                    `"',
       I'll bet you   ""o o                    O O|)
           have!      _\ -/_                  _\o/ _
                     || || |*                /|\ / |\
                     \\ || ***              //| |  |\\
                      \\o=***********      // | |  | ||
                      |\(#'***\\        -==#  | |  | ||
                      |====|*  ')         '\  |====| /#
                      |/|| |                  | || |  "
                      ( )( )                  | || |
                      |-||-|                  | || |
                      | || |                  | || |
      ________________[_][__\________________/__)(_)_____________________

ๅฝ“็„ถ๏ผŒ่ฟ™ๅฏ่ƒฝไธๆ˜ฏไธ€ไธชๅฅฝ็š„ๆ•ฐๆฎๆฅๆบ๏ผŒไฝ†ๅœจ่ฎญ็ปƒไฝ ็š„ๆœบๅ™จๅญฆไน ๆจกๅž‹็š„ๅŒๆ—ถๆฌฃ่ตไธ€้ƒจ่€็ปๅ…ธไนŸๆฒกไป€ไนˆ้”™ใ€‚

3.8 ๆ€ป็ป“

ๆญๅ–œไฝ ๏ผŒไฝ ๅทฒ็ปๅฎŒๆˆไบ† OSEMN ๆจกๅž‹็š„็ฌฌไธ€ๆญฅใ€‚ไฝ ๅทฒ็ปๅญฆไน ไบ†ๅ„็ง่Žทๅ–ๆ•ฐๆฎ็š„ๆ–นๆณ•๏ผŒไปŽไธ‹่ฝฝๅˆฐๆŸฅ่ฏขๅ…ณ็ณปๆ•ฐๆฎๅบ“ใ€‚ๅœจไธ‹ไธ€็ซ ๏ผŒไนŸๆ˜ฏไธญ้—ด็ซ ่Š‚๏ผŒๆˆ‘ๅฐ†ๆ•™ไฝ ๅฆ‚ไฝ•ๅˆ›ๅปบไฝ ่‡ชๅทฑ็š„ๅ‘ฝไปค่กŒๅทฅๅ…ทใ€‚ๅฆ‚ๆžœไฝ ่ฟซไธๅŠๅพ…ๅœฐๆƒณไบ†่งฃๆ•ฐๆฎๆธ…็†๏ผŒๅฏไปฅ่ทณ่ฟ‡่ฟ™ไธ€ๆญฅ๏ผŒ็›ดๆŽฅ่ฟ›ๅ…ฅ็ฌฌไบ”็ซ ๏ผˆOSEMN ๆจกๅž‹็š„็ฌฌไบŒๆญฅ๏ผ‰ใ€‚

3.9 ่ฟ›ไธ€ๆญฅๆŽข็ดข

  • ๅฏปๆ‰พไธ€ไธชๆ•ฐๆฎ้›†ๆฅ็ปƒไน ๏ผŸGitHub ็Ÿฅ่ฏ†ๅบ“ Awesome Public Datasets ๅˆ—ๅ‡บไบ†ๆ•ฐ็™พไธชๅ…ฌๅผ€ๅฏ็”จ็š„้ซ˜่ดจ้‡ๆ•ฐๆฎ้›†
  • ๆˆ–่€…ไฝ ๆ›ดๆ„ฟๆ„็”จ API ๆฅ็ปƒไน ๏ผŸGitHub ๅบ“ Public API ๅˆ—ๅ‡บไบ†ๅพˆๅคšๅ…่ดน APIใ€‚City Bikes ๅ’Œ The One API ๆ˜ฏๆˆ‘็š„ๆœ€็ˆฑ
  • ็ผ–ๅ†™ SQL ๆŸฅ่ฏขไปŽๅ…ณ็ณปๆ•ฐๆฎๅบ“ไธญ่Žทๅ–ๆ•ฐๆฎๆ˜ฏไธ€้กน้‡่ฆ็š„ๆŠ€่ƒฝใ€‚Ben Forta ็š„ใ€ŠSQL in 10 Minutes a Dayใ€‹ไธ€ไนฆ็š„ๅ‰ 15 ่ฏพ่ฎฒไบ† SELECT ่ฏญๅฅๅŠๅ…ถ่ฟ‡ๆปคใ€ๅˆ†็ป„ๅ’ŒๆŽ’ๅบๅŠŸ่ƒฝ