මට මෙහි කිසිදු පිළිතුරක් භාවිතා කළ නොහැක. ලබා ගත හැකි jq, ෂෙල් අරා නැත, ප්රකාශයක් නැත, grep -P, බැලූ බැල්මට සහ බැලූ බැල්මට නැත, පයිතන්, පර්ල් නැත, රූබි නැත, නැත - බාෂ් පවා නැත ... ඉතිරි පිළිතුරු සරලව ක්රියා නොකරයි. ජාවාස්ක්රිප්ට් හුරුපුරුදු බව පෙනේ, නමුත් ටින් එක පවසන්නේ නෙස්කැෆේ - එබැවින් එය ද යන්නක් නැත :) මගේ සරල අවශ්යතාවය සඳහා වුවද - ඒවා අධික ලෙස හා මන්දගාමී වනු ඇත.
එහෙත්, මගේ මොඩමයේ json ආකෘතිගත පිළිතුරෙන් බොහෝ විචල්යයන් ලබා ගැනීම මට අතිශයින් වැදගත් ය. මම එය කරන්නේ මගේ රවුටර වලදී ඉතා කාර්යබහුල වූ කාර්යබහුල බොක්ස් ය. අවදිවීම පමණක් භාවිතා කිරීමේ ගැටළු නොමැත: පරිසීමක සකසා දත්ත කියවන්න. තනි විචල්යයක් සඳහා, එපමණයි!
awk 'BEGIN { FS="\""; RS="," }; { if ($2 == "login") {print $4} }' test.json
මට අරා නොමැති බව මතකද? මට ෂෙල් ස්ක්රිප්ටයක අවශ්ය විචල්යයන් 11 ට අවලංගු විග්රහ කළ දත්ත ලබා දීමට සිදු විය. මා කොතැනක බැලූවත් එය කළ නොහැකි මෙහෙයුමක් යැයි කියනු ලැබේ. ඒ ගැනත් ප්රශ්නයක් නැහැ.
මගේ විසඳුම සරලයි. මෙම කේතය: 1) ප්රශ්නයෙන් .json ගොනුව විග්රහ කරන්න (ඇත්ත වශයෙන්ම, මම වැඩිපුරම උච්චාරණය කළ පිළිතුරෙන් වැඩ කරන දත්ත නියැදියක් ණයට ගෙන ඇත) සහ උපුටා ගත් දත්ත තෝරාගන්න, ප්ලස් 2) නොමිලේ නම් කරන ලද කවචය ලබා දෙමින් ෂෙල් විචල්යයන් නිර්මාණය කරන්න. විචල්ය නම්.
eval $( curl -s 'https://api.github.com/users/lambda' |
awk ' BEGIN { FS="\""; RS="," };
{
if ($2 == "login") { print "Login=\""$4"\"" }
if ($2 == "name") { print "Name=\""$4"\"" }
if ($2 == "updated_at") { print "Updated=\""$4"\"" }
}' )
echo "$Login, $Name, $Updated"
ඇතුළත හිස් තැන් සමඟ ගැටළු නොමැත. මගේ භාවිතයේදී, එකම විධානය මඟින් දිගු තනි පේළි ප්රතිදානයක් විග්රහ කරයි. Eval භාවිතා කරන බැවින්, මෙම විසඳුම සුදුසු වන්නේ විශ්වාසදායක දත්ත සඳහා පමණි. පිකප් නොකියවූ දත්ත වලට අනුවර්තනය වීම සරල ය. විශාල විචල්යයන් සංඛ්යාවක් සඳහා, වෙනත් නම් භාවිතා කර ආන්තික වේග ලාභයක් ලබා ගත හැකිය. අරාව නොමැතිකම පැහැදිලිවම අදහස් කරන්නේ: අමතර විකාරයකින් තොරව බහුවිධ වාර්තා නොමැත. නමුත් අරා ලබා ගත හැකි ස්ථානවල මෙම විසඳුම අනුවර්තනය වීම සරල කාර්යයකි.
ai මයිකල් සෙඩ් පිළිතුර බොහෝ දුරට ක්රියාත්මක වේ (නමුත් මට ඒ ගැන අදහස් දැක්විය නොහැක). මගේ මනාව ආකෘතිගත කරන ලද දත්ත සඳහා - එය ක්රියාත්මක වේ. මෙහි භාවිතා කර ඇති උදාහරණය සමඟ එතරම් නොවේ (නැතිවූ උපුටා දැක්වීම් එය ඉවත දමයි). එය සංකීර්ණ හා වෙනස් කිරීමට අපහසුය. ප්ලස්, විචල්යයන් 11 ක් උපුටා ගැනීම සඳහා ඇමතුම් 11 ක් කිරීමට මා කැමති නැත. මන්ද? මම විචල්යයන් 9 ක් උපුටා ගන්නා ලූප 100 ක් ගත කළෙමි: sed ශ්රිතය තත්පර 48.99 ක් ගත් අතර මගේ විසඳුම තත්පර 0.91 ක් ගතවිය! සාධාරණ නැද්ද? විචල්යයන් 9 ක තනි නිස්සාරණයක් කිරීම: 0.51 එදිරිව තත්පර 0.02.