锘??xml version="1.0" encoding="utf-8" standalone="yes"?>午夜精品久久久久久,亚洲高清影视,国产一区二区高清不卡http://www.shnenglu.com/megax/category/6330.htmlzh-cnThu, 07 Aug 2008 18:07:48 GMTThu, 07 Aug 2008 18:07:48 GMT60[杞琞瀛楃杞崲http://www.shnenglu.com/megax/articles/58279.htmlmegaxmegaxThu, 07 Aug 2008 12:18:00 GMThttp://www.shnenglu.com/megax/articles/58279.htmlhttp://www.shnenglu.com/megax/comments/58279.htmlhttp://www.shnenglu.com/megax/articles/58279.html#Feedback0http://www.shnenglu.com/megax/comments/commentRss/58279.htmlhttp://www.shnenglu.com/megax/services/trackbacks/58279.html涓 C++ 涓?string涓巜string浜掕漿

鏂規(guī)硶涓錛?/p>

string WideToMutilByte(const wstring& _src)
{
int nBufSize = WideCharToMultiByte(GetACP(), 0, _src.c_str(),-1, NULL, 0, 0, FALSE);

char *szBuf = new char[nBufSize];

WideCharToMultiByte(GetACP(), 0, _src.c_str(),-1, szBuf, nBufSize, 0, FALSE);

string strRet(szBuf);

delete []szBuf;
szBuf = NULL;

return strRet;
}

wstring MutilByteToWide(const string& _src)
{
//璁$畻瀛楃涓?string 杞垚 wchar_t 涔嬪悗鍗犵敤鐨勫唴瀛樺瓧鑺傛暟
int nBufSize = MultiByteToWideChar(GetACP(),0,_src.c_str(),-1,NULL,0);

//涓?wsbuf 鍒嗛厤鍐呭瓨 BufSize 涓瓧鑺?br>wchar_t *wsBuf = new wchar_t[nBufSize];

//杞寲涓?unicode 鐨?WideString
MultiByteToWideChar(GetACP(),0,_src.c_str(),-1,wsBuf,nBufSize);

wstring wstrRet(wsBuf);

delete []wsBuf;
wsBuf = NULL;

return wstrRet;
}

 


杞澆錛歝sdn

榪欑瘒鏂囩珷閲岋紝鎴戝皢緇欏嚭鍑犵C++ std::string鍜宻td::wstring鐩鎬簰杞崲鐨勮漿鎹㈡柟娉曘?br> 
絎竴縐嶆柟娉曪細璋冪敤WideCharToMultiByte()鍜孧ultiByteToWideChar()錛屼唬鐮佸涓嬶紙鍏充簬璇︾粏鐨勮В閲婏紝鍙互鍙傝冦妛indows鏍稿績緙栫▼銆嬶級錛?br> 

#include <string>
#include <windows.h>
using namespace std;
//Converting a WChar string to a Ansi string
std::string WChar2Ansi(LPCWSTR pwszSrc)
{
         int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);
 
         if (nLen<= 0) return std::string("");
 
         char* pszDst = new char[nLen];
         if (NULL == pszDst) return std::string("");
 
         WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);
         pszDst[nLen -1] = 0;
 
         std::string strTemp(pszDst);
         delete [] pszDst;
 
         return strTemp;
}

 
string ws2s(wstring& inputws)
{
        return WChar2Ansi(inputws.c_str());
}

 

 
//Converting a Ansi string to WChar string


std::wstring Ansi2WChar(LPCSTR pszSrc, int nLen)
 
{
    int nSize = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pszSrc, nLen, 0, 0);
    if(nSize <= 0) return NULL;
 
         WCHAR *pwszDst = new WCHAR[nSize+1];
    if( NULL == pwszDst) return NULL;
 
    MultiByteToWideChar(CP_ACP, 0,(LPCSTR)pszSrc, nLen, pwszDst, nSize);
    pwszDst[nSize] = 0;
 
    if( pwszDst[0] == 0xFEFF)                    // skip Oxfeff
        for(int i = 0; i < nSize; i ++)
                            pwszDst[i] = pwszDst[i+1];
 
    wstring wcharString(pwszDst);
         delete pwszDst;
 
    return wcharString;
}

 
std::wstring s2ws(const string& s)
{
     return Ansi2WChar(s.c_str(),s.size());
}


 
 
絎簩縐嶆柟娉曪細閲囩敤ATL灝佽_bstr_t鐨勮繃娓★細錛堟敞錛宊bstr_鏄疢icrosoft Specific鐨勶紝鎵浠ヤ笅闈唬鐮佸彲浠ュ湪VS2005閫氳繃錛屾棤縐繪鎬э級錛?/p>


#include <string>
#include <comutil.h>
using namespace std;
#pragma comment(lib, "comsuppw.lib")
 
string ws2s(const wstring& ws);
wstring s2ws(const string& s);
 
string ws2s(const wstring& ws)
{
         _bstr_t t = ws.c_str();
         char* pchar = (char*)t;
         string result = pchar;
         return result;
}

 
wstring s2ws(const string& s)
{
         _bstr_t t = s.c_str();
         wchar_t* pwchar = (wchar_t*)t;
         wstring result = pwchar;
         return result;
}


 
絎笁縐嶆柟娉曪細浣跨敤CRT搴撶殑mbstowcs()鍑芥暟鍜寃cstombs()鍑芥暟錛屽鉤鍙版棤鍏籌紝闇璁懼畾locale銆?/p>


#include <string>
#include <locale.h>
using namespace std;
string ws2s(const wstring& ws)
{
         string curLocale = setlocale(LC_ALL, NULL);        // curLocale = "C";
 
         setlocale(LC_ALL, "chs");
 
         const wchar_t* _Source = ws.c_str();
         size_t _Dsize = 2 * ws.size() + 1;
         char *_Dest = new char[_Dsize];
         memset(_Dest,0,_Dsize);
         wcstombs(_Dest,_Source,_Dsize);
         string result = _Dest;
         delete []_Dest;
 
         setlocale(LC_ALL, curLocale.c_str());
 
         return result;
}

 
wstring s2ws(const string& s)
{
         setlocale(LC_ALL, "chs");
 
         const char* _Source = s.c_str();
         size_t _Dsize = s.size() + 1;
         wchar_t *_Dest = new wchar_t[_Dsize];
         wmemset(_Dest, 0, _Dsize);
         mbstowcs(_Dest,_Source,_Dsize);
         wstring result = _Dest;
         delete []_Dest;
 
         setlocale(LC_ALL, "C");
 
         return result;
}


浜?utf8.utf16.utf32鐨勭浉浜掕漿鍖?/p>

鍙互鍙傝僓nicode.org 涓婃湁ConvertUTF.c鍜孋onvertUTF.h 錛堜笅杞藉湴鍧錛?a >http://www.unicode.org/Public/PROGRAMS/CVTUTF/錛?/p>

瀹炵幇鏂囦歡ConvertUTF.c錛氾紙.h鐪侊級
/**//*
 * Copyright 2001-2004 Unicode, Inc.
 *
 * Disclaimer
 *
 * This source code is provided as is by Unicode, Inc. No claims are
 * made as to fitness for any particular purpose. No warranties of any
 * kind are expressed or implied. The recipient agrees to determine
 * applicability of information provided. If this file has been
 * purchased on magnetic or optical media from Unicode, Inc., the
 * sole remedy for any claim will be exchange of defective media
 * within 90 days of receipt.
 *
 * Limitations on Rights to Redistribute This Code
 *
 * Unicode, Inc. hereby grants the right to freely use the information
 * supplied in this file in the creation of products supporting the
 * Unicode Standard, and to make copies of this file in any form
 * for internal or external distribution as long as this notice
 * remains attached.
 */

/**//* ---------------------------------------------------------------------

    Conversions between UTF32, UTF-16, and UTF-8. Source code file.
    Author: Mark E. Davis, 1994.
    Rev History: Rick McGowan, fixes & updates May 2001.
    Sept 2001: fixed const & error conditions per
    mods suggested by S. Parent & A. Lillich.
    June 2002: Tim Dodd added detection and handling of incomplete
    source sequences, enhanced error detection, added casts
    to eliminate compiler warnings.
    July 2003: slight mods to back out aggressive FFFE detection.
    Jan 2004: updated switches in from-UTF8 conversions.
    Oct 2004: updated to use UNI_MAX_LEGAL_UTF32 in UTF-32 conversions.

    See the header file "ConvertUTF.h" for complete documentation.

------------------------------------------------------------------------ */


#include "ConvertUTF.h"
#ifdef CVTUTF_DEBUG
#include <stdio.h>
#endif

static const int halfShift  = 10; /**//* used for shifting by 10 bits */

static const UTF32 halfBase = 0x0010000UL;
static const UTF32 halfMask = 0x3FFUL;

#define UNI_SUR_HIGH_START  (UTF32)0xD800
#define UNI_SUR_HIGH_END    (UTF32)0xDBFF
#define UNI_SUR_LOW_START   (UTF32)0xDC00
#define UNI_SUR_LOW_END     (UTF32)0xDFFF
#define false       0
#define true        1

/**//* --------------------------------------------------------------------- */

ConversionResult ConvertUTF32toUTF16 (
    const UTF32** sourceStart, const UTF32* sourceEnd,
    UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags) {
    ConversionResult result = conversionOK;
    const UTF32* source = *sourceStart;
    UTF16* target = *targetStart;
    while (source < sourceEnd) {
    UTF32 ch;
    if (target >= targetEnd) {
        result = targetExhausted; break;
    }
    ch = *source++;
    if (ch <= UNI_MAX_BMP) { /**//* Target is a character <= 0xFFFF */
        /**//* UTF-16 surrogate values are illegal in UTF-32; 0xffff or 0xfffe are both reserved values */
        if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) {
        if (flags == strictConversion) {
            --source; /**//* return to the illegal value itself */
            result = sourceIllegal;
            break;
        } else {
            *target++ = UNI_REPLACEMENT_CHAR;
        }
        } else {
        *target++ = (UTF16)ch; /**//* normal case */
        }
    } else if (ch > UNI_MAX_LEGAL_UTF32) {
        if (flags == strictConversion) {
        result = sourceIllegal;
        } else {
        *target++ = UNI_REPLACEMENT_CHAR;
        }
    } else {
        /**//* target is a character in range 0xFFFF - 0x10FFFF. */
        if (target + 1 >= targetEnd) {
        --source; /**//* Back up source pointer! */
        result = targetExhausted; break;
        }
        ch -= halfBase;
        *target++ = (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START);
        *target++ = (UTF16)((ch & halfMask) + UNI_SUR_LOW_START);
    }
    }
    *sourceStart = source;
    *targetStart = target;
    return result;
}

/**//* --------------------------------------------------------------------- */

ConversionResult ConvertUTF16toUTF32 (
    const UTF16** sourceStart, const UTF16* sourceEnd,
    UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags) {
    ConversionResult result = conversionOK;
    const UTF16* source = *sourceStart;
    UTF32* target = *targetStart;
    UTF32 ch, ch2;
    while (source < sourceEnd) {
    const UTF16* oldSource = source; /**//*  In case we have to back up because of target overflow. */
    ch = *source++;
    /**//* If we have a surrogate pair, convert to UTF32 first. */
    if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) {
        /**//* If the 16 bits following the high surrogate are in the source buffer */
        if (source < sourceEnd) {
        ch2 = *source;
        /**//* If it's a low surrogate, convert to UTF32. */
        if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) {
            ch = ((ch - UNI_SUR_HIGH_START) << halfShift)
            + (ch2 - UNI_SUR_LOW_START) + halfBase;
            ++source;
        } else if (flags == strictConversion) { /**//* it's an unpaired high surrogate */
            --source; /**//* return to the illegal value itself */
            result = sourceIllegal;
            break;
        }
        } else { /**//* We don't have the 16 bits following the high surrogate. */
        --source; /**//* return to the high surrogate */
        result = sourceExhausted;
        break;
        }
    } else if (flags == strictConversion) {
        /**//* UTF-16 surrogate values are illegal in UTF-32 */
        if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) {
        --source; /**//* return to the illegal value itself */
        result = sourceIllegal;
        break;
        }
    }
    if (target >= targetEnd) {
        source = oldSource; /**//* Back up source pointer! */
        result = targetExhausted; break;
    }
    *target++ = ch;
    }
    *sourceStart = source;
    *targetStart = target;
#ifdef CVTUTF_DEBUG
if (result == sourceIllegal) {
    fprintf(stderr, "ConvertUTF16toUTF32 illegal seq 0x%04x,%04x\n", ch, ch2);
    fflush(stderr);
}
#endif
    return result;
}

/**//* --------------------------------------------------------------------- */

/**//*
 * Index into the table below with the first byte of a UTF-8 sequence to
 * get the number of trailing bytes that are supposed to follow it.
 * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is
 * left as-is for anyone who may want to do such conversion, which was
 * allowed in earlier algorithms.
 */
static const char trailingBytesForUTF8[256] = {
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5
};

/**//*
 * Magic values subtracted from a buffer value during UTF8 conversion.
 * This table contains as many values as there might be trailing bytes
 * in a UTF-8 sequence.
 */
static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL,
             0x03C82080UL, 0xFA082080UL, 0x82082080UL };

/**//*
 * Once the bits are split out into bytes of UTF-8, this is a mask OR-ed
 * into the first byte, depending on how many bytes follow.  There are
 * as many entries in this table as there are UTF-8 sequence types.
 * (I.e., one byte sequence, two byte etc.). Remember that sequencs
 * for *legal* UTF-8 will be 4 or fewer bytes total.
 */
static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };

/**//* --------------------------------------------------------------------- */

/**//* The interface converts a whole buffer to avoid function-call overhead.
 * Constants have been gathered. Loops & conditionals have been removed as
 * much as possible for efficiency, in favor of drop-through switches.
 * (See "Note A" at the bottom of the file for equivalent code.)
 * If your compiler supports it, the "isLegalUTF8" call can be turned
 * into an inline function.
 */

/**//* --------------------------------------------------------------------- */

ConversionResult ConvertUTF16toUTF8 (
    const UTF16** sourceStart, const UTF16* sourceEnd,
    UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags) {
    ConversionResult result = conversionOK;
    const UTF16* source = *sourceStart;
    UTF8* target = *targetStart;
    while (source < sourceEnd) {
    UTF32 ch;
    unsigned short bytesToWrite = 0;
    const UTF32 byteMask = 0xBF;
    const UTF32 byteMark = 0x80;
    const UTF16* oldSource = source; /**//* In case we have to back up because of target overflow. */
    ch = *source++;
    /**//* If we have a surrogate pair, convert to UTF32 first. */
    if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) {
        /**//* If the 16 bits following the high surrogate are in the source buffer */
        if (source < sourceEnd) {
        UTF32 ch2 = *source;
        /**//* If it's a low surrogate, convert to UTF32. */
        if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) {
            ch = ((ch - UNI_SUR_HIGH_START) << halfShift)
            + (ch2 - UNI_SUR_LOW_START) + halfBase;
            ++source;
        } else if (flags == strictConversion) { /**//* it's an unpaired high surrogate */
            --source; /**//* return to the illegal value itself */
            result = sourceIllegal;
            break;
        }
        } else { /**//* We don't have the 16 bits following the high surrogate. */
        --source; /**//* return to the high surrogate */
        result = sourceExhausted;
        break;
        }
    } else if (flags == strictConversion) {
        /**//* UTF-16 surrogate values are illegal in UTF-32 */
        if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) {
        --source; /**//* return to the illegal value itself */
        result = sourceIllegal;
        break;
        }
    }
    /**//* Figure out how many bytes the result will require */
    if (ch < (UTF32)0x80) {         bytesToWrite = 1;
    } else if (ch < (UTF32)0x800) {     bytesToWrite = 2;
    } else if (ch < (UTF32)0x10000) {   bytesToWrite = 3;
    } else if (ch < (UTF32)0x110000) {  bytesToWrite = 4;
    } else {                bytesToWrite = 3;
                        ch = UNI_REPLACEMENT_CHAR;
    }

    target += bytesToWrite;
    if (target > targetEnd) {
        source = oldSource; /**//* Back up source pointer! */
        target -= bytesToWrite; result = targetExhausted; break;
    }
    switch (bytesToWrite) { /**//* note: everything falls through. */
        case 4: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
        case 3: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
        case 2: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
        case 1: *--target =  (UTF8)(ch | firstByteMark[bytesToWrite]);
    }
    target += bytesToWrite;
    }
    *sourceStart = source;
    *targetStart = target;
    return result;
}

/**//* --------------------------------------------------------------------- */

/**//*
 * Utility routine to tell whether a sequence of bytes is legal UTF-8.
 * This must be called with the length pre-determined by the first byte.
 * If not calling this from ConvertUTF8to*, then the length can be set by:
 *  length = trailingBytesForUTF8[*source]+1;
 * and the sequence is illegal right away if there aren't that many bytes
 * available.
 * If presented with a length > 4, this returns false.  The Unicode
 * definition of UTF-8 goes up to 4-byte sequences.
 */

static Boolean isLegalUTF8(const UTF8 *source, int length) {
    UTF8 a;
    const UTF8 *srcptr = source+length;
    switch (length) {
    default: return false;
    /**//* Everything else falls through when "true" */
    case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false;
    case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false;
    case 2: if ((a = (*--srcptr)) > 0xBF) return false;

    switch (*source) {
        /**//* no fall-through in this inner switch */
        case 0xE0: if (a < 0xA0) return false; break;
        case 0xED: if (a > 0x9F) return false; break;
        case 0xF0: if (a < 0x90) return false; break;
        case 0xF4: if (a > 0x8F) return false; break;
        default:   if (a < 0x80) return false;
    }

    case 1: if (*source >= 0x80 && *source < 0xC2) return false;
    }
    if (*source > 0xF4) return false;
    return true;
}

/**//* --------------------------------------------------------------------- */

/**//*
 * Exported function to return whether a UTF-8 sequence is legal or not.
 * This is not used here; it's just exported.
 */
Boolean isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd) {
    int length = trailingBytesForUTF8[*source]+1;
    if (source+length > sourceEnd) {
    return false;
    }
    return isLegalUTF8(source, length);
}

/**//* --------------------------------------------------------------------- */

ConversionResult ConvertUTF8toUTF16 (
    const UTF8** sourceStart, const UTF8* sourceEnd,
    UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags) {
    ConversionResult result = conversionOK;
    const UTF8* source = *sourceStart;
    UTF16* target = *targetStart;
    while (source < sourceEnd) {
    UTF32 ch = 0;
    unsigned short extraBytesToRead = trailingBytesForUTF8[*source];
    if (source + extraBytesToRead >= sourceEnd) {
        result = sourceExhausted; break;
    }
    /**//* Do this check whether lenient or strict */
    if (! isLegalUTF8(source, extraBytesToRead+1)) {
        result = sourceIllegal;
        break;
    }
    /**//*
     * The cases all fall through. See "Note A" below.
     */
    switch (extraBytesToRead) {
        case 5: ch += *source++; ch <<= 6; /**//* remember, illegal UTF-8 */
        case 4: ch += *source++; ch <<= 6; /**//* remember, illegal UTF-8 */
        case 3: ch += *source++; ch <<= 6;
        case 2: ch += *source++; ch <<= 6;
        case 1: ch += *source++; ch <<= 6;
        case 0: ch += *source++;
    }
    ch -= offsetsFromUTF8[extraBytesToRead];

    if (target >= targetEnd) {
        source -= (extraBytesToRead+1); /**//* Back up source pointer! */
        result = targetExhausted; break;
    }
    if (ch <= UNI_MAX_BMP) { /**//* Target is a character <= 0xFFFF */
        /**//* UTF-16 surrogate values are illegal in UTF-32 */
        if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) {
        if (flags == strictConversion) {
            source -= (extraBytesToRead+1); /**//* return to the illegal value itself */
            result = sourceIllegal;
            break;
        } else {
            *target++ = UNI_REPLACEMENT_CHAR;
        }
        } else {
        *target++ = (UTF16)ch; /**//* normal case */
        }
    } else if (ch > UNI_MAX_UTF16) {
        if (flags == strictConversion) {
        result = sourceIllegal;
        source -= (extraBytesToRead+1); /**//* return to the start */
        break; /**//* Bail out; shouldn't continue */
        } else {
        *target++ = UNI_REPLACEMENT_CHAR;
        }
    } else {
        /**//* target is a character in range 0xFFFF - 0x10FFFF. */
        if (target + 1 >= targetEnd) {
        source -= (extraBytesToRead+1); /**//* Back up source pointer! */
        result = targetExhausted; break;
        }
        ch -= halfBase;
        *target++ = (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START);
        *target++ = (UTF16)((ch & halfMask) + UNI_SUR_LOW_START);
    }
    }
    *sourceStart = source;
    *targetStart = target;
    return result;
}

/**//* --------------------------------------------------------------------- */

ConversionResult ConvertUTF32toUTF8 (
    const UTF32** sourceStart, const UTF32* sourceEnd,
    UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags) {
    ConversionResult result = conversionOK;
    const UTF32* source = *sourceStart;
    UTF8* target = *targetStart;
    while (source < sourceEnd) {
    UTF32 ch;
    unsigned short bytesToWrite = 0;
    const UTF32 byteMask = 0xBF;
    const UTF32 byteMark = 0x80;
    ch = *source++;
    if (flags == strictConversion ) {
        /**//* UTF-16 surrogate values are illegal in UTF-32 */
        if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) {
        --source; /**//* return to the illegal value itself */
        result = sourceIllegal;
        break;
        }
    }
    /**//*
     * Figure out how many bytes the result will require. Turn any
     * illegally large UTF32 things (> Plane 17) into replacement chars.
     */
    if (ch < (UTF32)0x80) {         bytesToWrite = 1;
    } else if (ch < (UTF32)0x800) {     bytesToWrite = 2;
    } else if (ch < (UTF32)0x10000) {   bytesToWrite = 3;
    } else if (ch <= UNI_MAX_LEGAL_UTF32) {  bytesToWrite = 4;
    } else {                bytesToWrite = 3;
                        ch = UNI_REPLACEMENT_CHAR;
                        result = sourceIllegal;
    }
   
    target += bytesToWrite;
    if (target > targetEnd) {
        --source; /**//* Back up source pointer! */
        target -= bytesToWrite; result = targetExhausted; break;
    }
    switch (bytesToWrite) { /**//* note: everything falls through. */
        case 4: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
        case 3: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
        case 2: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
        case 1: *--target = (UTF8) (ch | firstByteMark[bytesToWrite]);
    }
    target += bytesToWrite;
    }
    *sourceStart = source;
    *targetStart = target;
    return result;
}

/**//* --------------------------------------------------------------------- */

ConversionResult ConvertUTF8toUTF32 (
    const UTF8** sourceStart, const UTF8* sourceEnd,
    UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags) {
    ConversionResult result = conversionOK;
    const UTF8* source = *sourceStart;
    UTF32* target = *targetStart;
    while (source < sourceEnd) {
    UTF32 ch = 0;
    unsigned short extraBytesToRead = trailingBytesForUTF8[*source];
    if (source + extraBytesToRead >= sourceEnd) {
        result = sourceExhausted; break;
    }
    /**//* Do this check whether lenient or strict */
    if (! isLegalUTF8(source, extraBytesToRead+1)) {
        result = sourceIllegal;
        break;
    }
    /**//*
     * The cases all fall through. See "Note A" below.
     */
    switch (extraBytesToRead) {
        case 5: ch += *source++; ch <<= 6;
        case 4: ch += *source++; ch <<= 6;
        case 3: ch += *source++; ch <<= 6;
        case 2: ch += *source++; ch <<= 6;
        case 1: ch += *source++; ch <<= 6;
        case 0: ch += *source++;
    }
    ch -= offsetsFromUTF8[extraBytesToRead];

    if (target >= targetEnd) {
        source -= (extraBytesToRead+1); /**//* Back up the source pointer! */
        result = targetExhausted; break;
    }
    if (ch <= UNI_MAX_LEGAL_UTF32) {
        /**//*
         * UTF-16 surrogate values are illegal in UTF-32, and anything
         * over Plane 17 (> 0x10FFFF) is illegal.
         */
        if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) {
        if (flags == strictConversion) {
            source -= (extraBytesToRead+1); /**//* return to the illegal value itself */
            result = sourceIllegal;
            break;
        } else {
            *target++ = UNI_REPLACEMENT_CHAR;
        }
        } else {
        *target++ = ch;
        }
    } else { /**//* i.e., ch > UNI_MAX_LEGAL_UTF32 */
        result = sourceIllegal;
        *target++ = UNI_REPLACEMENT_CHAR;
    }
    }
    *sourceStart = source;
    *targetStart = target;
    return result;
}

/**//* ---------------------------------------------------------------------

    Note A.
    The fall-through switches in UTF-8 reading code save a
    temp variable, some decrements & conditionals.  The switches
    are equivalent to the following loop:
    {
        int tmpBytesToRead = extraBytesToRead+1;
        do {
        ch += *source++;
        --tmpBytesToRead;
        if (tmpBytesToRead) ch <<= 6;
        } while (tmpBytesToRead > 0);
    }
    In UTF-8 writing code, the switches on "bytesToWrite" are
    similarly unrolled loops.

   --------------------------------------------------------------------- */

 

涓?C++ 鐨勫瓧絎︿覆涓嶤#鐨勮漿鍖?/p>

1錛夊皢system::String 杞寲涓篊++鐨剆tring錛?br>// convert_system_string.cpp
// compile with: /clr
#include <string>
#include <iostream>
using namespace std;
using namespace System;

void MarshalString ( String ^ s, string& os ) {
   using namespace Runtime::InteropServices;
   const char* chars =
      (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
   os = chars;
   Marshal::FreeHGlobal(IntPtr((void*)chars));
}

void MarshalString ( String ^ s, wstring& os ) {
   using namespace Runtime::InteropServices;
   const wchar_t* chars =
      (const wchar_t*)(Marshal::StringToHGlobalUni(s)).ToPointer();
   os = chars;
   Marshal::FreeHGlobal(IntPtr((void*)chars));
}

int main() {
   string a = "test";
   wstring b = L"test2";
   String ^ c = gcnew String("abcd");

   cout << a << endl;
   MarshalString(c, a);
   c = "efgh";
   MarshalString(c, b);
   cout << a << endl;
   wcout << b << endl;
}


2錛夊皢System::String杞寲涓篶har*鎴杦_char*
// convert_string_to_wchar.cpp
// compile with: /clr
#include < stdio.h >
#include < stdlib.h >
#include < vcclr.h >

using namespace System;

int main() {
   String ^str = "Hello";

   // Pin memory so GC can't move it while native function is called
   pin_ptr<const wchar_t> wch = PtrToStringChars(str);
   printf_s("%S\n", wch);

   // Conversion to char* :
   // Can just convert wchar_t* to char* using one of the
   // conversion functions such as:
   // WideCharToMultiByte()
   // wcstombs_s()
   //  etc
   size_t convertedChars = 0;
   size_t  sizeInBytes = ((str->Length + 1) * 2);
   errno_t err = 0;
   char    *ch = (char *)malloc(sizeInBytes);

   err = wcstombs_s(&convertedChars,
                    ch, sizeInBytes,
                    wch, sizeInBytes);
   if (err != 0)
      printf_s("wcstombs_s  failed!\n");

    printf_s("%s\n", ch);
}


 



megax 2008-08-07 20:18 鍙戣〃璇勮
]]>
[杞琞vi甯哥敤鎿嶄綔http://www.shnenglu.com/megax/articles/44182.htmlmegaxmegaxTue, 11 Mar 2008 06:14:00 GMThttp://www.shnenglu.com/megax/articles/44182.htmlhttp://www.shnenglu.com/megax/comments/44182.htmlhttp://www.shnenglu.com/megax/articles/44182.html#Feedback0http://www.shnenglu.com/megax/comments/commentRss/44182.htmlhttp://www.shnenglu.com/megax/services/trackbacks/44182.html闃呰鍏ㄦ枃

megax 2008-03-11 14:14 鍙戣〃璇勮
]]>
[杞琞Linux甯歌闂瑙g瓟http://www.shnenglu.com/megax/articles/44181.htmlmegaxmegaxTue, 11 Mar 2008 06:12:00 GMThttp://www.shnenglu.com/megax/articles/44181.htmlhttp://www.shnenglu.com/megax/comments/44181.htmlhttp://www.shnenglu.com/megax/articles/44181.html#Feedback0http://www.shnenglu.com/megax/comments/commentRss/44181.htmlhttp://www.shnenglu.com/megax/services/trackbacks/44181.html涓銆?濡備綍寤虹珛澶氱敤鎴?br>銆銆adduser newuser鎺ョ潃杈撳叆鍛戒護passwd newuser錛屽睆騫曞皢鎻愮ず杈撳叆鍙d護錛屽啀嬈¤緭鍏ョ‘璁わ紝 涓涓柊鐨勭敤鎴峰氨澧炲姞鎴愬姛
銆銆Linux鎻愪緵浜嗗叚涓櫄鎷熸帶鍒跺彴錛岀敤ALT+F1~F6鍒囨崲錛堝湪X-window涓嬬敤CRTL+ALT+F1~F6鍒囨崲錛夛紝姣忎釜鎺у埗鍙板潎鍙互鐢ㄤ笉鍚岀殑鐢ㄦ埛鐧誨綍錛岃繍琛屼笉鍚岀殑紼嬪簭銆?/p>

浜屻佸湪Linux涓嬪浣曚嬌鐢ㄨ蔣鐩樸佸厜鐩樹互鍙奃OS絳夐潪Linux鍒嗗尯

銆銆瑁呰澆鐨勫懡浠ゆ槸mount錛屾牸寮忓涓嬶細mount -t 鏂囦歡緋葷粺綾誨瀷 璁懼鍚?瑁呰澆鐩綍

銆銆鏂囦歡緋葷粺綾誨瀷灝辨槸鍒嗗尯鏍煎紡錛孡inux鏀寔鐨勬枃浠剁郴緇熺被鍨嬫湁璁稿錛?/p>

銆銆msdos DOS鍒嗗尯鏂囦歡緋葷粺綾誨瀷
銆銆vfat 鏀寔闀挎枃浠跺悕鐨凞OS鍒嗗尯鏂囦歡錛堝彲浠ョ悊瑙d負Windows鏂囦歡錛夌郴緇熺被鍨?br>銆銆iso9660 鍏夌洏鐨勬枃浠剁郴緇熺被鍨?br>銆銆ext2 Linux鐨勬枃浠剁郴緇熺被鍨?/p>

銆銆璁懼鍚嶏紝鎸囩殑鏄綘瑕佽杞界殑璁懼鐨勫悕縐般傝蔣鐩樹竴鑸負/dev/fd0 fd1錛涘厜鐩樺垯鏍規(guī)嵁浣犵殑鍏夐┍鐨勪綅緗潵鍐沖畾錛岄氬父鍏夐┍瑁呭湪絎簩紜洏鐨勪富鐩樹綅緗氨鏄?dev/hdc;濡傛灉璁塊棶鐨勬槸DOS鐨勫垎鍖猴紝鍒欏垪鍑哄叾璁懼鍚嶏紝濡?dev/hda1鏄寚絎竴紜洏鐨勭涓涓垎鍖恒?瑁呰澆鐩綍錛屽氨鏄綘鎸囧畾璁懼鐨勮澆鍏ョ偣銆?/p>

銆銆1. 瑁呰澆杞洏

銆銆棣栧厛鐢╩kdir /mnt/floppy 鍦?mnt鐩綍涓嬪緩绔嬩竴涓┖鐨刦loppy鐩綍錛岀劧鍚庤緭鍏ount -t msdos /dev/fd0 /mnt/floppy 灝咲OS鏂囦歡鏍煎紡鐨勪竴寮犺蔣鐩樿杞借繘鏉ワ紝浠ュ悗灝卞彲浠ュ湪/mnt/floppy鐩綍涓嬫壘鍒拌繖寮犺蔣鐩樼殑鎵鏈夊唴瀹廣?/p>

銆銆2. 瑁呰澆Windows鎵鍦ㄧ殑C鐩?/p>

銆銆mkdir /mnt/c 鍦?mnt鐩綍涓嬪緩绔嬩竴涓┖鐨刢鐩綍;
銆銆mount -t vfat /dev/hda1 /mnt/c 灝哤indows鐨凜鐩樻寜闀挎枃浠跺悕鏍煎紡瑁呰澆鍒?mnt/c鐩綍涓嬶紝浠ュ悗鍦ㄨ鐩綍涓嬪氨鑳借鍐機鐩樻牴鐩綍涓殑鍐呭銆?/p>

銆銆3.瑁呰澆鍏夌洏

銆銆mkdir /mnt/cdrom 鍦?mnt鐩綍涓嬪緩绔嬩竴涓┖鐨刢drom鐩綍;
銆銆mount -t iso9660 /dev/hdc /mnt/cdrom 灝嗗厜鐩樿澆鍏ュ埌鏂囦歡緋葷粺涓潵錛屽皢鍦?mnt/cdrom鐩綍涓嬫壘鍒板厜鐩樺唴瀹廣傛湁鐨凩inux鐗堟湰鍏佽鐢╩ount /dev/cdrom鎴杕ount /mnt/cdrom鍛戒護瑁呰澆鍏夌洏銆?br>銆銆瑕佹敞鎰忕殑鏄紝鐢╩ount鍛戒護瑁呭叆鐨勬槸杞洏銆佸厜鐩橈紝鑰屼笉鏄蔣椹便佸厜椹便傛湁浜涘垵瀛﹁呭鏄撶姱涓涓瘺鐥咃紝浠ヤ負鐢ㄤ笂闈㈠懡浠ゅ悗錛岃蔣椹卞氨鎴愪簡/mnt/floppy錛屽厜椹卞氨鎴愪簡/mnt/cdrom錛屽叾瀹炰笉鐒訛紝褰撲綘瑕佹崲涓寮犲厜鐩樻垨杞洏鏃訛紝涓瀹氳鍏堝嵏杞斤紝鍐嶅鏂扮洏閲嶆柊瑁呰澆銆?/p>

銆銆4.鍗歌澆

銆銆鍗歌澆鐨勫懡浠ゆ牸寮忔槸:umonut 鐩綍鍚嶏紝渚嬪瑕佸嵏杞借蔣鐩橈紝鍙緭鍏ュ懡浠monut /mnt/floppy銆傝娉ㄦ剰鐨勬槸錛屽湪鍗歌澆鍏夌洏涔嬪墠錛岀洿鎺ユ寜鍏夐┍闈㈡澘涓婄殑寮瑰嚭閿槸涓嶄細璧蜂綔鐢ㄧ殑銆?/p>

涓夈丷PM鐨勪嬌鐢ㄦ柟娉?/p>

1. 鐢≧PM瀹夎杞歡鍖?錛歳pm -ivh 杞歡鏂囦歡鍚?br>銆銆渚嬪 rpm -ivh fvwm95-2.0.43a.chinese-1.i386.rpm 灞忓箷涓婂氨浼氳緭鍑鴻杞歡鍖呯殑鍚嶇О鍜屽畨瑁呯殑榪涘害鏉?
銆銆fvwm95 ###############
銆銆褰撹繘搴︽潯璧板埌搴曪紝涓枃fvwm95錛堜竴縐峏-Window鐨勭晫闈級灝卞畨瑁呭畬浜嗭紝鍐嶈繍琛孹-Window錛屽晩錛屽叏涓枃鐨刦vwm95灝卞湪鎴戠殑鐪煎墠銆?/p>

2. 鐢≧PM鍙嶅畨瑁呰蔣浠跺寘:rpm -e 杞歡鍚?br>銆銆渚嬪:rpm -e fvwm95

3. 鐢≧PM鍗囩駭杞歡鍖?rpm -Uvh 杞歡鍗囩駭鐗堟枃浠跺悕
銆銆渚嬪:rpm -Uvh fvwm95-2.1.0a.chinese-1.i386.rpm錛孯PM鑷姩鍙嶅畨瑁呭師鏉ョ殑鑰佺増鏈紝灝嗗崌綰х増鐨勮蔣浠跺畨瑁呭叆緋葷粺銆?/p>

鍥涖丩inux寮鏈虹洿鎺ヨ繘鍏ユ枃鏈晫闈紝鎬庢牱鎵嶈兘璁╁畠榛樿榪涘叆鍥懼艦鐣岄潰錛?/p>

淇敼/etc/inittab鏂囦歡錛屽叾涓湁涓琛宨d:3:initdefault錛屾剰鎬濇槸璇村紑鏈洪粯璁よ繘鍏ヨ繍琛岀駭鍒?錛堝鐢ㄦ埛鐨勬枃鏈晫闈級錛屾妸瀹冩敼鎴恑d:5:initdefault錛屾棦寮鏈洪粯璁よ繘鍏ヨ繍琛岀駭鍒?錛堝鐢ㄦ埛鐨勫浘褰㈢晫闈級銆傝繖鏍峰氨琛屼簡銆?/p>

浜斻佸浣曞皢man杞瓨涓烘枃鏈枃浠訛紵

浠s鐨刴an涓轟緥
man ls |col -b >ls.txt
灝唅nfo鍙樻垚鏂囨湰,浠ake涓轟緥
info make -o make.txt -s

鍏佸浣曞皢灝?man page 杞垚 HTML 鏍煎紡錛?/p>

浣跨敤 man2html 榪欎釜鎸囦護錛屽氨鍙互灝?man page 杞垚 HTML 鏍煎紡浜嗐傜敤娉曟槸錛?/p>

man2html filename > htmlfile.html

涓冦?tar錛?tar.gz錛?bz2錛?tar.bz2錛?bz錛?gz鏄粈涔堟枃浠訛紝濡備綍瑙e紑浠栦滑錛?br>浠栦滑閮芥槸鏂囦歡(鍘嬬緝)鍖呫?br>.tar錛氭妸鏂囦歡鎵撳寘錛屼笉鍘嬬緝錛歵ar cvf *.tar dirName 瑙e紑錛歵ar xvf *.tar
.tar.gz錛氭妸鏂囦歡鎵撳寘騫跺帇緙╋細tar czvf *.tar.gz dirName 瑙e紑錛歵ar xzvf *.tar.gz
.bz2錛氳В寮錛歜zip2 -d *.bz2
.bz錛氳В寮錛歜zip -d *.bz
.gz錛氳В寮錛歡zip -d *.gz

鍏乴inux涓嬪浣曡В寮.zip錛?rar鍘嬬緝鏂囦歡錛?br>rh8涓嬫湁涓涓浘褰㈢晫闈㈢殑杞歡file-roller鍙互鍋氳繖浠朵簨銆備護澶栧彲浠ョ敤unzip *.zip瑙e紑zip鏂囦歡錛寀nrar *.rar瑙e紑rar鏂囦歡錛屼笉榪噓nrar涓鑸郴緇熶笉鑷甫錛岃鍒扮綉涓婁笅杞姐?/p>

涔?jié)銆乴inux涓嬪浣曟祻瑙?iso鍏夌洏闀滃儚鏂囦歡錛?br>a.寤轟竴涓洰褰曪紝濡傦細mkdir a
b.鎶奿so鏂囦歡鎸傝澆鍒拌鐩綍涓婏細mount -o loop xxxx.iso a
鐜板湪鐩綍a閲岀殑鍐呭灝辨槸iso鏂囦歡閲岀殑鍐呭浜嗐?/p>

鍗併乴inux涓嬪浣曢厤緗綉緇滐紵
鐢╪etconfig銆?#8220;IP address:”灝辨槸瑕侀厤緗殑IP鍦板潃錛?#8220;Netmask:”瀛愮綉鎺╃爜錛?#8220;Default gateway (IP):”緗戝叧錛?#8220;Primary nameserver:”DNS鏈嶅姟鍣↖P

鍗佷竴銆佸浣曡linux鍚姩鍚庤嚜鍔ㄦ寕杞藉埗瀹氬垎鍖猴紵
緙栬緫/etc/fstab鏂囦歡錛屽湪閲岄潰鍔犲叆鐩稿簲鐨勮

鍗佷簩銆佸浣曞畾鍒秎inux鍚姩鏃跺惎鍔ㄧ殑鏈嶅姟錛?br>鍦ㄦ帶鍒跺彴鎴栫粓绔笅榪愯ntsysv錛岀劧鍚庢妸瑕佸惎鍔ㄧ殑鏈嶅姟閫変笂錛屽鏋滆寮鏈轟笉鍚姩鏌愪釜閭e氨鎶婁粬鐨勯変腑鍘繪帀銆?/p>

鍗佷笁銆佸垹闄ゆ枃浠跺ぇ灝忎負闆剁殑鏂囦歡
rm -i `find ./ -size 0`
find ./ -size 0 -exec rm {} \;
find ./ -size |xargs rm -f &闈炲父鏈夋晥
for file in * #鑷繁瀹氫箟闇瑕佸垹闄ょ殑鏂囦歡綾誨瀷
do
if [ ! -s ${file} ]
then
rm ${file}
echo “rm $file Success!”
fi
done

鍗佸洓銆佹煡鐪嬬郴緇熶俊鎭?br>cat /proc/cpuinfo - CPU (i.e. vendor, Mhz, flags like mmx)
cat /proc/interrupts - 涓柇
cat /proc/ioports - 璁懼IO绔彛
cat /proc/meminfo - 鍐呭瓨淇℃伅(i.e. mem used, free, swap size)
cat /proc/partitions - 鎵鏈夎澶囩殑鎵鏈夊垎鍖?br>cat /proc/pci - PCI璁懼鐨勪俊鎭?br>cat /proc/swaps - 鎵鏈塖wap鍒嗗尯鐨勪俊鎭?br>cat /proc/version - Linux鐨勭増鏈彿 鐩稿綋浜?uname -r
uname -a - 鐪嬬郴緇熷唴鏍哥瓑淇℃伅

鍗佷簲銆乧d鍏夌洏鍋氭垚iso鏂囦歡
cp /dev/cdrom xxxx.iso

鍗佸叚銆佸揩閫熻鐪嬪紑鏈虹殑紜歡媯嫻?br>dmesg | more

鍗佷竷銆佹煡鐪嬬‖鐩樼殑浣跨敤鎯呭喌
df -k 浠涓哄崟浣嶆樉紺?br>df -h 浠ヤ漢鎬у寲鍗曚綅鏄劇ず錛屽彲浠ユ槸b,k,m,g,t..

鍗佸叓銆佹煡鐪嬬洰褰曠殑澶у皬
du -sh dirname
-s 浠呮樉紺烘昏
-h 浠銆丮銆丟涓哄崟浣嶏紝鎻愰珮淇℃伅鐨勫彲璇繪с侹B銆丮B銆丟B鏄互1024涓烘崲綆楀崟浣嶏紝-H浠?000涓烘崲綆楀崟浣嶃?/p>

鍗佷節(jié)銆佹煡鎵炬垨鍒犻櫎姝e湪浣跨敤鏌愭枃浠剁殑榪涚▼
fuser filename
fuser -k filename

浜屽崄銆佸瓧絎︽ā寮忎笅璁劇疆/鍒犻櫎鐜鍙橀噺
bash涓?br>璁劇疆錛歟xport 鍙橀噺鍚?鍙橀噺鍊?br>鍒犻櫎錛歶nset 鍙橀噺鍚?br>csh涓?br>璁劇疆錛歴etenv 鍙橀噺鍚?鍙橀噺鍊?br>鍒犻櫎錛歶nsetenv 鍙橀噺鍚?/p>

浜屽崄涓銆乿im涓樉紺洪鑹叉垨涓嶆樉紺洪鑹?br>vi ~/.vimrc; 濡傛灉鏈塻yntax on錛屽垯鏄劇ず棰滆壊錛宻yntax off錛屽垯涓嶆樉紺洪鑹?/p>

浜屽崄浜屻佷慨鏀圭郴緇熸椂闂?br>date -s “2003-04-14 cst”錛宑st鎸囨椂鍖猴紝鏃墮棿璁懼畾鐢╠ate -s 18:10

浜屽崄涓夈佸紑鏈哄氨mount涓妛indows涓嬬殑鍒嗗尯
鑷姩灝唚indows鐨刣鐩樻寕鍒?mnt/d涓婏紝鐢╲i鎵撳紑/etc/fstab錛屽姞鍏ヤ互涓嬩竴琛?br>/dev/hda5 /mnt/d vfat defaults,codepage=936,iocharset=cp936 0 0
娉ㄦ剰錛屽厛寰楁墜宸ュ緩绔嬩竴涓?mnt/d鐩綍

浜屽崄鍥涖佸湪澶氱駭鐩綍涓煡鎵炬煇涓枃浠剁殑鏂規(guī)硶
find /dir -name filename.ext
du -a | grep filename.ext
locate filename.ext

浜屽崄浜斻佷笉璁╂櫘閫氱敤鎴瘋嚜宸辨敼瀵嗙爜
[root@xin_fc etc]# chmod 511 /usr/bin/passwd
鍙堟兂璁╂櫘閫氱敤鎴瘋嚜宸辨敼瀵嗙爜
[root@xin_fc etc]# chmod 4511 /usr/bin/passwd

浜屽崄鍏佺敤dd鍋歩so
dd if=/dev/cdrom of=/tmp/aaa.iso

浜屽崄涓冦佽Linux鑷姩鍚屾鏃墮棿
vi /etc/crontab
鍔犱笂涓鍙?br>00 0 1 * * root rdate -s time.nist.gov

浜屽崄鍏乻sh涓婃潵鑳戒笉鑳戒笉鑷姩鏂嚎
閭f槸timetou鐨勮緗紝淇敼TMOUT鍙橀噺鍊?/p>

浜屽崄涔?jié)銆佺洃瑙嗘墍鏈夐氳繃鏈満緗戝崱鐨勬暟鎹?br>tcpdump iptraf



megax 2008-03-11 14:12 鍙戣〃璇勮
]]>
[杞琞WSAD 灝忔妧宸?/title><link>http://www.shnenglu.com/megax/articles/44179.html</link><dc:creator>megax</dc:creator><author>megax</author><pubDate>Tue, 11 Mar 2008 06:10:00 GMT</pubDate><guid>http://www.shnenglu.com/megax/articles/44179.html</guid><wfw:comment>http://www.shnenglu.com/megax/comments/44179.html</wfw:comment><comments>http://www.shnenglu.com/megax/articles/44179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/megax/comments/commentRss/44179.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/megax/services/trackbacks/44179.html</trackback:ping><description><![CDATA[<p><span id="hvzpftn" class=tpc_content><font size=2><font color=#00008b><strong>鈼?濡備綍鏇存敼 WSAD 鐨勭晫闈㈣縐?/strong></font></p> <p>鏇存敼 WSAD 瀹夎鐩綍涓?wsappdev.ini 鍦ㄨ VMArgs=-Xj9 鍚庡姞鍏ワ紝涓虹┖鍒欎笌鎿嶄綔緋葷粺榛樿璇█鐩稿悓銆?br>VMArgs=-Xj9 -Duser.language=en -Duser.region=US</p> <p>鍏朵粬璇█鍙傛暟錛?br>-Duser.language=en -Duser.region=US 銆愯嫳鏂囥?br>-Duser.language=zh -Duser.region=CN 銆愪腑鏂囩畝浣撱?br>-Duser.language=zh -Duser.region=TW 銆愪腑鏂囩箒浣撱?br><a id=more-41></a><br></font><font color=#00008b><br><strong><font size=2>鈼?WebSphere Studio Application Developer 5鐗堟湰涓浣曟洿鏀歸粯璁ょ殑宸ヤ綔鍖?/font></strong></font></p> <p><font size=2>鍦ㄩ粯璁ゆ儏鍐典笅錛學ebSphere Application Developer 5鍦ㄥ惎鍔ㄧ殑鏃跺欎細寮瑰嚭涓涓彁紺虹獥鍙h鐢ㄦ埛閫夋嫨 workspace銆傚鏋滐紝鐢ㄦ埛閫変腑浜嗙獥鍙d笅鏂圭殑“灝嗘宸ヤ綔絀洪棿鐢ㄤ綔緙虹渷鍊煎茍涓斾笉鍐嶆樉紺烘瀵硅瘽妗?#8221;錛岄偅涔堜笅涓嬈″鎴峰啀榪愯WSAD鐨勬椂鍊欏皢涓嶄細寮瑰嚭鎻愮ず紿楀彛璁╃敤鎴烽夋嫨宸ヤ綔鍖恒傚鏋滐紝鐢ㄦ埛鍐嶆兂鏇存崲宸ヤ綔鍖哄皢鏃犳硶榪涜銆傚湪 Eclipse 3.1 涓紝File 鑿滃崟涓嬫湁 Switch Workspace 鐨勯夐」錛屼絾鏄?WSAD 5 鏄熀浜?Eclipse 2.x 鐨勶紝鎴戝皾璇曚簡寰堜箙閮芥病鏈夋壘鍒板湪閫夐」涓洿鏀?workspace 鐨勫湴鏂廣備箣鍚庡湪緗戜笂媯绱紝鏌ュ埌榪欎釜闂鏈夊涓嬭В鍐蟲柟妗堬細<br>鏂規(guī)硶涓錛氱敤鍛戒護琛屾柟寮忓惎鍔ㄥ茍鎸囧畾鎵鐢ㄧ殑宸ヤ綔鍖?/p> <p>1. 鎵撳紑鍛戒護琛岀獥鍙o紝榪涘叆wsappdev.exe鎵鍦ㄧ殑鐩綍(wsappdev.exe搴旇鍦╓SAD鐨勫畨瑁呰礬寰勪笅)</p> <p>2. 鎵ц鍛戒護錛歸sappdev.exe -data <workdirectory>錛屽叾涓?workdirectory>鏄渶瑕佷嬌鐢ㄧ殑宸ヤ綔鍖虹洰褰曘傚亣璁捐鎸囧畾鐨勫伐浣滃尯璺緞涓篊:\ workbentch,閭d箞鍛戒護灝卞簲璇ュ啓鎴愶細wsappdev.exe -data C:\workbentch</p> <p>鏂規(guī)硶浜岋細鐢ㄥ懡浠よ鏂瑰紡鍚姩騫跺脊鍑烘彁紺虹獥鍙h鐢ㄦ埛閫夋嫨宸ヤ綔鍖?/p> <p>1. 鎵撳紑鍛戒護琛岀獥鍙o紝榪涘叆wsappdev.exe鎵鍦ㄧ殑鐩綍</p> <p>2. 鎵ц鍛戒護錛歸sappdev.exe -setworkspace</p> <p>鏂規(guī)硶涓夛細閫氳繃鏇存敼閰嶇疆鏂囦歡璁¦SAD鍚姩鐨勬椂鍊欏脊鍑轟竴涓彁紺虹獥鍙h鐢ㄦ埛閫夋嫨宸ヤ綔鍖?/p> <p>1. 鐢ㄦ枃鏈紪杈戝櫒鎵撳紑wsappdev.ini鏂囦歡(wsappdev.ini鏂囦歡鍜寃sappdev.exe鏂囦歡鍦ㄧ浉鍚岀殑璺緞涓?,榛樿鎯呭喌涓嬪彲浠ョ湅鍒扮被浼煎涓嬬殑鍐呭錛?/p> <p>[Settings]</p> <p>DefaultWorkspace=<my Documents>\IBM\wsappdev51\workspace</p> <p>ProductName=IBM WebSphere Studio Application Developer</p> <p>Version=5.1.1</p> <p>Full=Yes</p> <p>KeyName=wsappdev510</p> <p>VMArgs=-Xj9</p> <p>LUMProductID=1</p> <p>LUMProductVersion=5.1.1</p> <p>Website=www.ibm.com/websphere/developer/zones/studio/appdev/</p> <p>[Environment Variables]</p> <p>2. 鍦?[Environment Variables] 鐨勪笂鏂規(guī)坊鍔犱竴琛?SetWorkSpace=true 錛屼繚瀛?wsappdev.ini 鏂囦歡銆?/p> <p>3. 鍏抽棴 wsappdev.ini 鏂囦歡錛岄氳繃鑿滃崟鎴栬呯洿鎺ュ弻鍑?wsappdev.exe 鏂囦歡鍐嶆鍚姩 WSAD 鐨勬椂鍊欙紝灝變細寮瑰嚭涓涓彁紺虹獥鍙h鐢ㄦ埛閫夋嫨宸ヤ綔鍖恒?/p> <p><font color=#00008b><strong>鈼嬪湪 eclipse 鐨勫揩鎹鋒柟寮忓悗闈㈠姞涓涓?鍙傛暟:-nl “zh_US”,灝卞彲浠ユ壘鍥炶嫳鏂囩殑鐣岄潰錛屽姞鍙傛暟錛?nl “zh_CN” 錛屽氨鍙互鐢ㄥ埌涓枃鐣岄潰 </strong></font></font></span></p> <img src ="http://www.shnenglu.com/megax/aggbug/44179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/megax/" target="_blank">megax</a> 2008-03-11 14:10 <a href="http://www.shnenglu.com/megax/articles/44179.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>[杞琞AWK璇存槑http://www.shnenglu.com/megax/articles/44178.htmlmegaxmegaxTue, 11 Mar 2008 06:08:00 GMThttp://www.shnenglu.com/megax/articles/44178.htmlhttp://www.shnenglu.com/megax/comments/44178.htmlhttp://www.shnenglu.com/megax/articles/44178.html#Feedback0http://www.shnenglu.com/megax/comments/commentRss/44178.htmlhttp://www.shnenglu.com/megax/services/trackbacks/44178.htmlIBM鍙傝冩枃绔狅細http://www-128.ibm.com/developerworks/cn/linux/shell/awk/awk-1/index.html

AWK鏄竴縐嶄紭鑹殑鏂囨湰澶勭悊宸ュ叿銆傚畠涓嶄粎鏄?Linux 涓篃鏄換浣曠幆澧冧腑鐜版湁鐨勫姛鑳芥渶寮哄ぇ鐨勬暟鎹鐞嗗彂鍔ㄦ満涔嬩竴銆傝繖縐嶇紪紼嬪強鏁版嵁鎿嶄綔璇█錛堝叾鍚嶇О寰楄嚜浜庡畠鐨勫垱濮嬩漢 Alfred Aho 銆丳eter Weinberger 鍜?Brian Kernighan 濮撴皬鐨勯涓瓧姣嶏級鐨勬渶澶у姛鑳藉彇鍐充簬涓涓漢鎵鎷ユ湁鐨勭煡璇嗐?AWK 鎻愪緵浜嗘瀬鍏跺己澶х殑鍔熻兘錛氬彲浠ヨ繘琛屾牱寮忚鍏ャ佹祦鎺у埗銆佹暟瀛﹁繍綆楃銆佽繘紼嬫帶鍒惰鍙ョ敋鑷充簬鍐呯疆鐨勫彉閲忓拰鍑芥暟銆傚畠鍏峰浜嗕竴涓畬鏁寸殑璇█鎵搴斿叿鏈夌殑鍑犱箮鎵鏈夌簿緹庣壒鎬с傚疄闄呬笂 AWK 鐨勭‘鎷ユ湁鑷繁鐨勮璦錛?AWK 紼嬪簭璁捐璇█錛屼笁浣嶅垱寤鴻呭凡灝嗗畠姝e紡瀹氫箟涓?#8220;鏍峰紡鎵弿鍜屽鐞嗚璦”銆傚畠鍏佽鎮(zhèn)ㄥ垱寤虹畝鐭殑紼嬪簭錛岃繖浜涚▼搴忚鍙栬緭鍏ユ枃浠躲佷負鏁版嵁鎺掑簭銆佸鐞嗘暟鎹佸杈撳叆鎵ц璁$畻浠ュ強鐢熸垚鎶ヨ〃錛岃繕鏈夋棤鏁板叾浠栫殑鍔熻兘銆?/p>

      浣犲彲鑳藉UNIX姣旇緝鐔熸?zhèn)夊Q屼絾浣犲彲鑳藉awk寰堥檶鐢燂紝榪欎竴鐐逛篃涓嶅鎬紝鐨勭‘錛屼笌鍏朵紭縐鐨勫姛鑳界浉姣旓紝awk榪樿繙娌¤揪鍒板畠搴旀湁鐨勭煡鍚嶅害銆俛wk鏄粈涔堬紵涓庡叾瀹冨ぇ澶氭暟UNIX鍛戒護涓嶅悓鐨勬槸錛屼粠鍚嶅瓧涓婄湅錛屾垜浠笉鍙兘鐭ラ亾awk鐨勫姛鑳斤細瀹冩棦涓嶆槸鍏鋒湁鐙珛鎰忎箟鐨勮嫳鏂囧崟璇嶏紝涔熶笉鏄嚑涓浉鍏沖崟璇嶇殑緙╁啓銆備簨瀹炰笂錛宎wk鏄笁涓漢鍚嶇殑緙╁啓錛屼粬浠槸錛欰ho銆?Peter)Weinberg鍜?(Brain)Kernighan銆傛鏄繖涓変釜浜哄垱閫犱簡awk鈥斾竴涓紭縐鐨勬牱寮忔壂鎻忎笌澶勭悊宸ュ叿銆?/p>

銆  銆鏈綆鍗曞湴璇達紝 AWK 鏄竴縐嶇敤浜庡鐞嗘枃鏈殑緙栫▼璇█宸ュ叿銆侫WK 鍦ㄥ緢澶氭柟闈㈢被浼間簬 shell 緙栫▼璇█錛屽敖綆?AWK 鍏鋒湁瀹屽叏灞炰簬鍏舵湰韜殑璇硶銆傚畠鐨勮璁℃濇兂鏉ユ簮浜?SNOBOL4 銆乻ed 銆丮arc Rochkind璁捐鐨勬湁鏁堟ц璦銆佽璦宸ュ叿 yacc 鍜?lex 錛屽綋鐒惰繕浠?C 璇█涓幏鍙栦簡涓浜涗紭縐鐨勬濇兂銆傚湪鏈鍒濆垱閫?AWK 鏃訛紝鍏剁洰鐨勬槸鐢ㄤ簬鏂囨湰澶勭悊錛屽茍涓旇繖縐嶈璦鐨勫熀紜鏄紝鍙鍦ㄨ緭鍏ユ暟鎹腑鏈夋ā寮忓尮閰嶏紝灝辨墽琛屼竴緋誨垪鎸囦護銆傝瀹炵敤宸ュ叿鎵弿鏂囦歡涓殑姣忎竴琛岋紝鏌ユ壘涓庡懡浠よ涓墍緇欏畾鍐呭鐩稿尮閰嶇殑妯″紡銆傚鏋滃彂鐜板尮閰嶅唴瀹癸紝鍒欒繘琛屼笅涓涓紪紼嬫楠ゃ傚鏋滄壘涓嶅埌鍖歸厤鍐呭錛屽垯緇х畫澶勭悊涓嬩竴琛屻?/p>

銆  銆灝界鎿嶄綔鍙兘浼氬緢澶嶆潅錛屼絾鍛戒護鐨勮娉曞緇堟槸錛?/p>

銆  銆awk ‘{pattern + action}’ {filenames}

銆  銆鍏朵腑 pattern 琛ㄧず AWK 鍦ㄦ暟鎹腑鏌ユ壘鐨勫唴瀹癸紝鑰?action 鏄湪鎵懼埌鍖歸厤鍐呭鏃舵墍鎵ц鐨勪竴緋誨垪鍛戒護銆傝姳鎷彿 ({}) 涓嶉渶瑕佸湪紼嬪簭涓緇堝嚭鐜幫紝浣嗗畠浠敤浜庢牴鎹壒瀹氱殑妯″紡瀵逛竴緋誨垪鎸囦護榪涜鍒嗙粍銆?/p>

銆  銆gawk 鏄?AWK 鐨?GNU 鐗堟湰銆?/p>

涓銆丄WK鐨勫姛鑳芥槸浠涔堬紵

      涓巗ed鍜?grep寰堢浉浼鹼紝awk鏄竴縐嶆牱寮忔壂鎻忎笌澶勭悊宸ュ叿銆備絾鍏跺姛鑳藉嵈澶уぇ寮轟簬sed鍜実rep銆俛wk鎻愪緵浜嗘瀬鍏跺己澶х殑鍔熻兘錛氬畠鍑犱箮鍙互瀹屾垚grep鍜宻ed鎵鑳藉畬鎴愮殑鍏ㄩ儴宸ヤ綔錛屽悓鏃訛紝瀹冭繕鍙互鍙互榪涜鏍峰紡瑁呭叆銆佹祦鎺у埗銆佹暟瀛﹁繍綆楃銆佽繘紼嬫帶鍒惰鍙ョ敋鑷充簬鍐呯疆鐨勫彉閲忓拰鍑芥暟銆傚畠鍏峰浜嗕竴涓畬鏁寸殑璇█鎵搴斿叿鏈夌殑鍑犱箮鎵鏈夌簿緹庣壒鎬с傚疄闄呬笂錛宎wk鐨勭‘鎷ユ湁鑷繁鐨勮璦錛歛wk紼嬪簭璁捐璇█錛宎wk鐨勪笁浣嶅垱寤鴻呭凡灝嗗畠姝e紡瀹氫箟涓猴細鏍峰紡鎵弿鍜屽鐞嗚璦銆?/p>

浜屻佷負浠涔堜嬌鐢╝wk?

      鍗充嬌濡傛錛屼綘涔熻浠嶇劧浼氶棶錛屾垜涓轟粈涔堣浣跨敤awk?

      浣跨敤awk鐨勭涓涓悊鐢辨槸鍩轟簬鏂囨湰鐨勬牱寮忔壂鎻忓拰澶勭悊鏄垜浠粡甯稿仛鐨勫伐浣滐紝awk鎵鍋氱殑宸ヤ綔鏈変簺璞℃暟鎹簱錛屼絾涓庢暟鎹簱涓嶅悓鐨勬槸錛屽畠澶勭悊鐨勬槸鏂囨湰鏂囦歡錛岃繖浜涙枃浠舵病鏈変笓闂ㄧ殑瀛樺偍鏍煎紡錛屾櫘閫氱殑浜轟滑灝辮兘緙栬緫銆侀槄璇匯佺悊瑙e拰澶勭悊瀹冧滑銆傝屾暟鎹簱鏂囦歡寰寰鍏鋒湁鐗規(guī)畩鐨勫瓨鍌ㄦ牸寮忥紝榪欎嬌寰楀畠浠繀欏葷敤鏁版嵁搴撳鐞嗙▼搴忔潵澶勭悊瀹冧滑銆傛棦鐒惰繖縐嶇被浼間簬鏁版嵁搴撶殑澶勭悊宸ヤ綔鎴戜滑緇忓父浼氶亣鍒幫紝鎴戜滑灝卞簲褰撴壘鍒板鐞嗗畠浠殑綆渚挎槗琛岀殑鏂規(guī)硶錛孶NIX鏈夊緢澶氳繖鏂歸潰鐨勫伐鍏鳳紝渚嬪sed 銆乬rep銆乻ort浠ュ強find絳夌瓑錛宎wk鏄叾涓崄鍒嗕紭縐鐨勪竴縐嶃?/p>

      浣跨敤awk鐨勭浜屼釜鐞嗙敱鏄痑wk鏄竴涓畝鍗曠殑宸ュ叿錛屽綋鐒惰繖鏄浉瀵逛簬鍏跺己澶х殑鍔熻兘鏉ヨ鐨勩傜殑紜紝UNIX鏈夎澶氫紭縐鐨勫伐鍏鳳紝渚嬪UNIX澶╃劧鐨勫紑鍙戝伐鍏稢璇█鍙婂叾寤剁畫C++灝遍潪甯哥殑浼樼銆備絾鐩稿浜庡畠浠潵璇達紝awk瀹屾垚鍚屾牱鐨勫姛鑳借鏂逛究鍜岀畝鎹峰緱澶氥傝繖棣栧厛鏄洜涓篴wk鎻愪緵浜嗛傚簲澶氱闇瑕佺殑瑙e喅鏂規(guī)錛氫粠瑙e喅綆鍗曢棶棰樼殑awk鍛戒護琛屽埌澶嶆潅鑰岀簿宸х殑awk紼嬪簭璁捐璇█錛岃繖鏍峰仛鐨勫ソ澶勬槸錛屼綘鍙互涓嶅繀鐢ㄥ鏉傜殑鏂規(guī)硶鍘昏В鍐蟲湰鏉ュ緢綆鍗曠殑闂銆備緥濡傦紝浣犲彲浠ョ敤涓涓懡浠よ瑙e喅綆鍗曠殑闂錛岃孋涓嶈錛屽嵆浣夸竴涓啀綆鍗曠殑紼嬪簭錛孋璇█涔熷繀欏葷粡榪囩紪鍐欍佺紪璇戠殑鍏ㄨ繃紼嬨傚叾嬈★紝awk鏈韓鏄В閲婃墽琛岀殑錛岃繖灝變嬌寰梐wk紼嬪簭涓嶅繀緇忚繃緙栬瘧鐨勮繃紼嬶紝鍚屾椂錛岃繖涔熶嬌寰楀畠涓巗hell script紼嬪簭鑳藉寰堝ソ鐨勫鍚堛傛渶鍚庯紝awk鏈韓杈僀璇█綆鍗曪紝铏界劧awk鍚告敹浜咰璇█寰堝浼樼鐨勬垚鍒嗭紝鐔熸?zhèn)塁璇█浼氬瀛︿範awk鏈夊緢澶х殑甯姪錛屼絾 awk鏈韓涓嶉』瑕佷細浣跨敤C璇█鈥斺斾竴縐嶅姛鑳藉己澶т絾闇瑕佸ぇ閲忔椂闂村涔犳墠鑳芥帉鎻″叾鎶宸х殑寮鍙戝伐鍏楓?/p>

       浣跨敤awk鐨勭涓変釜鐞嗙敱鏄痑wk鏄竴涓鏄撹幏寰楃殑宸ュ叿銆備笌C鍜孋++璇█涓嶅悓錛宎wk鍙湁涓涓枃浠?/bin/awk)錛岃屼笖鍑犱箮姣忎釜鐗堟湰鐨刄NIX閮芥彁渚涘悇鑷増鏈殑awk錛屼綘瀹屽叏涓嶅繀璐瑰績鍘繪兂濡備綍鑾峰緱awk銆備絾C璇█鍗翠笉鏄繖鏍鳳紝铏界劧C璇█鏄疷NIX澶╃劧鐨勫紑鍙戝伐鍏鳳紝浣嗚繖涓紑鍙戝伐鍏峰嵈鏄崟鐙彂琛岀殑錛屾崲璦涔嬶紝浣犲繀欏諱負浣犵殑UNIX鐗堟湰鐨凜璇█寮鍙戝伐鍏峰崟鐙粯璐癸紙褰撶劧浣跨敤D鐗堣呴櫎澶栵級錛岃幏寰楀茍瀹夎瀹冿紝鐒跺悗浣犳墠鍙互浣跨敤瀹冦?/p>

      鍩轟簬浠ヤ笂鐞嗙敱錛屽啀鍔犱笂awk寮哄ぇ鐨勫姛鑳斤紝鎴戜滑鏈夌悊鐢辮錛屽鏋滀綘瑕佸鐞嗕笌鏂囨湰鏍峰紡鎵弿鐩稿叧鐨勫伐浣滐紝awk搴旇鏄綘鐨勭涓閫夋嫨銆傚湪榪欓噷鏈変竴涓彲閬靛驚鐨勪竴鑸師鍒欙細濡傛灉浣犵敤鏅氱殑shell宸ュ叿鎴杝hell script鏈夊洶闅劇殑璇濓紝璇曡瘯awk,濡傛灉awk浠嶄笉鑳借В鍐抽棶棰橈紝鍒欎究鐢–璇█錛屽鏋淐璇█浠嶇劧澶辮觸錛屽垯縐昏嚦C++銆?/p>

涓夈乤wk鐨勮皟鐢ㄦ柟寮?/p>

      鍓嶉潰鏇劇粡璇磋繃錛宎wk鎻愪緵浜嗛傚簲澶氱闇瑕佺殑涓嶅悓瑙e喅鏂規(guī)錛屽畠浠槸錛?/p>

      1銆?awk鍛戒護琛岋紝浣犲彲浠ヨ薄浣跨敤鏅歎NIX鍛戒護涓鏍蜂嬌鐢╝wk錛屽湪鍛戒護琛屼腑浣犱篃鍙互浣跨敤awk紼嬪簭璁捐璇█錛岃櫧鐒禷wk鏀寔澶氳鐨勫綍鍏ワ紝浣嗘槸褰曞叆闀塊暱鐨勫懡浠よ騫朵繚璇佸叾姝g‘鏃犺鍗存槸涓浠朵護浜哄ご鐤肩殑浜嬶紝鍥犳錛岃繖縐嶆柟娉曚竴鑸彧鐢ㄤ簬瑙e喅綆鍗曠殑闂銆傚綋鐒訛紝浣犱篃鍙互鍦╯hell script紼嬪簭涓紩鐢╝wk鍛戒護琛岀敋鑷砤wk紼嬪簭鑴氭湰銆?/p>

      2銆佷嬌鐢?f閫夐」璋冪敤awk紼嬪簭銆俛wk鍏佽灝嗕竴孌礱wk紼嬪簭鍐欏叆涓涓枃鏈枃浠訛紝鐒跺悗鍦╝wk鍛戒護琛屼腑鐢?f閫夐」璋冪敤騫舵墽琛岃繖孌電▼搴忋傚叿浣撶殑鏂規(guī)硶鎴戜滑灝嗗湪鍚庨潰鐨刟wk璇硶涓鍒般?/p>

      3銆佸埄鐢ㄥ懡浠よВ閲婂櫒璋冪敤awk紼嬪簭錛氬埄鐢║NIX鏀寔鐨勫懡浠よВ閲婂櫒鍔熻兘錛屾垜浠彲浠ュ皢涓孌礱wk紼嬪簭鍐欏叆鏂囨湰鏂囦歡錛岀劧鍚庡湪瀹冪殑絎竴琛屽姞涓?
#!/bin/awk -f
騫惰祴浜堣繖涓枃鏈枃浠朵互鎵ц鐨勬潈闄愩傝繖鏍峰仛涔嬪悗錛屼綘灝卞彲浠ュ湪鍛戒護琛屼腑鐢ㄧ被浼間簬涓嬮潰榪欐牱鐨勬柟寮忚皟鐢ㄥ茍鎵ц榪欐awk紼嬪簭浜嗐?/p>

$awk鑴氭湰鏂囨湰鍚?寰呭鐞嗘枃浠?/p>

awk鐨勮娉曪細

涓庡叾瀹僓NIX鍛戒護涓鏍鳳紝awk鎷ユ湁鑷繁鐨勮娉曪細

awk [ -F re] [parameter…] [’prog’] [-f progfile][in_file…]

鍙傛暟璇存槑錛?/p>

-F re:鍏佽awk鏇存敼鍏跺瓧孌靛垎闅旂銆?/p>

parameter: 璇ュ弬鏁板府鍔╀負涓嶅悓鐨勫彉閲忚祴鍊箋?/p>

‘prog’: awk鐨勭▼搴忚鍙ユ銆傝繖涓鍙ユ蹇呴』鐢ㄥ崟鎷撳彿錛?#8217;鍜?#8217;鎷搗錛屼互闃茶shell瑙i噴銆傝繖涓▼搴忚鍙ユ鐨勬爣鍑嗗艦寮忎負錛?/p>

‘pattern {action}’

      鍏朵腑pattern鍙傛暟鍙互鏄痚grep姝e垯琛ㄨ揪寮忎腑鐨勪換浣曚竴涓紝瀹冨彲浠ヤ嬌鐢ㄨ娉?re/鍐嶅姞涓婁竴浜涙牱寮忓尮閰嶆妧宸ф瀯鎴愩備笌sed綾諱技錛屼綘涔熷彲浠ヤ嬌鐢?#8221;,”鍒嗗紑涓ゆ牱寮忎互閫夋嫨鏌愪釜鑼冨洿銆傚叧浜庡尮閰嶇殑緇嗚妭錛屼綘鍙互鍙傝冮檮褰曪紝濡傛灉浠嶄笉鎳傜殑璇濓紝鎵炬湰UNIX涔﹀瀛rep鍜宻ed錛堟湰浜烘槸鍦ㄥ涔爀d鏃舵帉鎻″尮閰嶆妧鏈殑錛夈?action鍙傛暟鎬繪槸琚ぇ鎷彿鍖呭洿錛屽畠鐢變竴緋葷粺awk璇彞緇勬垚錛屽悇璇彞涔嬮棿鐢?#8221;;”鍒嗛殧銆俛wk瑙i噴瀹冧滑錛屽茍鍦╬attern緇欏畾鐨勬牱寮忓尮閰嶇殑璁板綍涓婃墽琛屽叾鎿嶄綔銆備笌shell綾諱技錛屼綘涔熷彲浠ヤ嬌鐢?#8220;#”浣滀負娉ㄩ噴絎︼紝瀹冧嬌“#”鍒拌灝劇殑鍐呭鎴愪負娉ㄩ噴錛屽湪瑙i噴鎵ц鏃訛紝瀹冧滑灝嗚蹇界暐銆備綘鍙互鐪佺暐pattern鍜?action涔嬩竴錛屼絾涓嶈兘涓よ呭悓鏃剁渷鐣ワ紝褰撶渷鐣attern鏃舵病鏈夋牱寮忓尮閰嶏紝琛ㄧず瀵規(guī)墍鏈夎錛堣褰曪級鍧囨墽琛屾搷浣滐紝鐪佺暐action鏃舵墽琛岀己鐪佺殑鎿嶄綔鈥斺斿湪鏍囧噯杈撳嚭涓婃樉紺恒?/p>

      -f progfile:鍏佽awk璋冪敤騫舵墽琛宲rogfile鎸囧畾鏈夌▼搴忔枃浠躲俻rogfile鏄竴涓枃鏈枃浠訛紝浠栧繀欏葷鍚坅wk鐨勮娉曘?/p>

      in_file:awk鐨勮緭鍏ユ枃浠訛紝awk鍏佽瀵瑰涓緭鍏ユ枃浠惰繘琛屽鐞嗐傚煎緱娉ㄦ剰鐨勬槸awk涓嶄慨鏀硅緭鍏ユ枃浠躲傚鏋滄湭鎸囧畾杈撳叆鏂囦歡錛宎wk灝嗘帴鍙楁爣鍑嗚緭鍏ワ紝騫跺皢緇撴灉鏄劇ず鍦ㄦ爣鍑嗚緭鍑轟笂銆俛wk鏀寔杈撳叆杈撳嚭閲嶅畾鍚戙?/p>

      awk鐨勮褰曘佸瓧孌典笌鍐呯疆鍙橀噺錛?/p>

      鍓嶉潰璇磋繃錛宎wk澶勭悊鐨勫伐浣滀笌鏁版嵁搴撶殑澶勭悊鏂瑰紡鏈夌浉鍚屼箣澶勶紝鍏剁浉鍚屽涔嬩竴灝辨槸awk鏀寔瀵硅褰曞拰瀛楁鐨勫鐞嗭紝鍏朵腑瀵瑰瓧孌電殑澶勭悊鏄痝rep鍜宻ed涓嶈兘瀹炵幇鐨勶紝榪欎篃鏄痑wk浼樹簬浜岃呯殑鍘熷洜涔嬩竴銆傚湪awk涓紝緙虹渷鐨勬儏鍐典笅鎬繪槸灝嗘枃鏈枃浠朵腑鐨勪竴琛岃涓轟竴涓褰曪紝鑰屽皢涓琛屼腑鐨勬煇涓閮ㄥ垎浣滀負璁板綍涓殑涓涓瓧孌點備負浜嗘搷浣滆繖浜涗笉鍚岀殑瀛楁錛宎wk鍊熺敤shell鐨勬柟娉曪紝鐢?1,$2,$3…榪欐牱鐨勬柟寮忔潵欏哄簭鍦拌〃紺鴻錛堣褰曪級涓殑涓嶅悓瀛楁銆傜壒孌婂湴錛宎wk鐢?0琛ㄧず鏁翠釜琛岋紙璁板綍錛夈備笉鍚岀殑瀛楁涔嬮棿鏄敤縐頒綔鍒嗛殧絎︾殑瀛楃鍒嗛殧寮鐨勩傜郴緇熼粯璁ょ殑鍒嗛殧絎︽槸絀烘牸銆俛wk鍏佽鍦ㄥ懡浠よ涓敤-F re鐨勫艦寮忔潵鏀瑰彉榪欎釜鍒嗛殧絎︺備簨瀹炰笂錛宎wk鐢ㄤ竴涓唴緗殑鍙橀噺FS鏉ヨ蹇嗚繖涓垎闅旂銆俛wk涓湁濂藉嚑涓繖鏍風殑鍐呯疆鍙橀噺錛屼緥濡傦紝璁板綍鍒嗛殧絎﹀彉閲廟S銆佸綋鍓嶅伐浣滅殑璁板綍鏁癗R絳夌瓑錛屾湰鏂囧悗闈㈢殑闄勮〃鍒楀嚭浜嗗叏閮ㄧ殑鍐呯疆鍙橀噺銆傝繖浜涘唴緗殑鍙橀噺鍙互鍦╝wk紼嬪簭涓紩鐢ㄦ垨淇敼錛屼緥濡傦紝浣犲彲浠ュ埄鐢∟R鍙橀噺鍦ㄦā寮忓尮閰嶄腑鎸囧畾宸ヤ綔鑼冨洿錛屼篃鍙互閫氳繃淇敼璁板綍鍒嗛殧絎S璁╀竴涓壒孌婂瓧絎﹁屼笉鏄崲琛岀浣滀負璁板綍鐨勫垎闅旂銆?/p>

      渚?鏄劇ず鏂囨湰鏂囦歡myfile涓涓冭鍒扮鍗佷簲琛屼腑浠ュ瓧絎?鍒嗛殧鐨勭涓瀛楁錛岀涓夊瓧孌靛拰絎竷瀛楁錛?/p>

awk -F % ‘NR==7,NR==15 {printf $1 $3 $7}’

鍥涖乤wk鐨勫唴緗嚱鏁?/p>

      awk 涔嬫墍浠ユ垚涓轟竴縐嶄紭縐鐨勭▼搴忚璁¤璦鐨勫師鍥犱箣涓鏄畠鍚告敹浜嗘煇浜涗紭縐鐨勭▼搴忚璁¤璦錛堜緥濡侰錛夎璦鐨勮澶氫紭鐐廣傝繖浜涗紭鐐逛箣涓灝辨槸鍐呯疆鍑芥暟鐨勪嬌鐢紝awk瀹氫箟騫舵敮鎸佷簡涓緋誨垪鐨勫唴緗嚱鏁幫紝鐢變簬榪欎簺鍑芥暟鐨勪嬌鐢紝浣垮緱awk鎻愪緵鐨勫姛鑳芥洿涓哄畬鍠勫拰寮哄ぇ錛屼緥濡傦紝awk浣跨敤浜嗕竴緋誨垪鐨勫瓧絎︿覆澶勭悊鍐呯疆鍑芥暟(榪欎簺鍑芥暟鐪嬭搗鏉ヤ笌C 璇█鐨勫瓧絎︿覆澶勭悊鍑芥暟鐩鎬技錛屽叾浣跨敤鏂瑰紡涓嶤璇█涓殑鍑芥暟涔熺浉宸棤鍑?錛屾鏄敱浜庤繖浜涘唴緗嚱鏁扮殑浣跨敤錛屼嬌awk澶勭悊瀛楃涓茬殑鍔熻兘鏇村姞寮哄ぇ銆傛湰鏂囧悗闈㈢殑闄勫綍涓垪鏈変竴鑸殑awk鎵鎻愪緵鐨勫唴緗嚱鏁幫紝榪欎簺鍐呯疆鍑芥暟涔熻涓庝綘鐨刟wk鐗堟湰鏈変簺鍑哄叆錛屽洜姝わ紝鍦ㄤ嬌鐢ㄤ箣鍓嶏紝鏈濂藉弬鑰冧竴涓嬩綘鐨勭郴緇熶腑鐨勮仈鏈哄府鍔┿?/p>

      浣滀負鍐呯疆鍑芥暟鐨勪竴涓緥瀛愶紝鎴戜滑灝嗗湪榪欓噷浠嬬粛awk鐨刾rintf鍑芥暟錛岃繖涓嚱鏁頒嬌寰梐wk涓巆璇█鐨勮緭鍑虹浉涓鑷淬傚疄闄呬笂錛宎wk涓湁璁稿寮曠敤褰㈠紡閮芥槸浠嶤璇█鍊熺敤榪囨潵鐨勩傚鏋滀綘鐔熸?zhèn)塁璇█錛屼綘涔熻浼氳寰楀叾涓殑printf鍑芥暟錛屽畠鎻愪緵鐨勫己澶ф牸寮忚緭鍑哄姛鑳芥浘緇忓甫鎴戜滑璁稿鐨勬柟渚褲傚垢榪愮殑鏄紝鎴戜滑鍦╝wk涓張鍜屽畠閲嶉簡銆俛wk涓璸rintf鍑犱箮涓嶤璇█涓竴妯′竴鏍鳳紝濡傛灉浣犵啛鎮(zhèn)塁璇█鐨勮瘽錛屼綘瀹屽叏鍙互鐓璇█鐨勬ā寮忎嬌鐢╝wk涓殑printf銆傚洜姝ゅ湪榪欓噷錛屾垜浠彧緇欏嚭涓涓緥瀛愶紝濡傛灉浣犱笉鐔熸?zhèn)夌殑璇濆Q岃闅忎究鎵句竴鏈珻璇█鐨勫叆闂ㄤ功緲葷炕銆?/p>

渚?鏄劇ず鏂囦歡myfile涓殑琛屽彿鍜岀3瀛楁錛?/p>

$awk ‘{printf”%03d%sn”,NR,$1}’ myfile

浜斻佸湪鍛戒護琛屼嬌鐢╝wk

      鎸夌収欏哄簭錛屾垜浠簲褰撹瑙wk紼嬪簭璁捐鐨勫唴瀹逛簡錛屼絾鍦ㄨ瑙d箣鍓嶏紝鎴戜滑灝嗙敤涓浜涗緥瀛愭潵瀵瑰墠闈㈢殑鐭ヨ瘑榪涜鍥為【錛岃繖浜涗緥瀛愰兘鏄湪鍛戒護琛屼腑浣跨敤鐨勶紝鐢辨鎴戜滑鍙互鐭ラ亾鍦ㄥ懡浠よ涓嬌鐢╝wk鏄涔堢殑鏂逛究銆傝繖鏍峰仛鐨勫師鍥犱竴鏂歸潰鏄負涓嬮潰鐨勫唴瀹逛綔閾哄灚錛屽彟涓鏂歸潰鏄粙緇嶄竴浜涜В鍐崇畝鍗曢棶棰樼殑鏂規(guī)硶錛屾垜浠畬鍏ㄦ病鏈夊繀瑕佺敤澶嶆潅鐨勬柟娉曟潵瑙e喅綆鍗曠殑闂鈥?鏃㈢劧awk鎻愪緵浜嗚緝涓虹畝鍗曠殑鏂規(guī)硶鐨勮瘽銆?/p>

渚嬶細鏄劇ず鏂囨湰鏂囦歡mydoc鍖歸厤錛堝惈鏈夛級瀛楃涓?#8221;sun”鐨勬墍鏈夎銆?/p>

$awk ‘/sun/{print}’ mydoc

      鐢變簬鏄劇ず鏁翠釜璁板綍錛堝叏琛岋級鏄痑wk鐨勭己鐪佸姩浣滐紝鍥犳鍙互鐪佺暐action欏廣?/p>

$awk ‘/sun/’ mydoc

渚嬶細涓嬮潰鏄竴涓緝涓哄鏉傜殑鍖歸厤鐨勭ず渚嬶細

$awk ‘/[Ss]un/,/[Mm]oon/ {print}’ myfile

      瀹冨皢鏄劇ず絎竴涓尮閰峉un鎴杝un鐨勮涓庣涓涓尮閰峂oon鎴杕oon鐨勮涔嬮棿鐨勮錛屽茍鏄劇ず鍒版爣鍑嗚緭鍑轟笂銆?/p>

渚嬶細涓嬮潰鐨勭ず渚嬫樉紺轟簡鍐呯疆鍙橀噺鍜屽唴緗嚱鏁發(fā)ength錛堬級鐨勪嬌鐢細

$awk ‘length($0)>80 {print NR}’ myfile

      璇ュ懡浠よ灝嗘樉紺烘枃鏈琺yfile涓墍鏈夎秴榪?0涓瓧絎︾殑琛屽彿錛屽湪榪欓噷錛岀敤$0琛ㄧず鏁翠釜璁板綍錛堣錛夛紝鍚屾椂錛屽唴緗彉閲廚R涓嶄嬌鐢ㄦ爣蹇楃’$'銆?/p>

渚嬶細浣滀負涓涓緝涓哄疄闄呯殑渚嬪瓙錛屾垜浠亣璁捐瀵筓NIX涓殑鐢ㄦ埛榪涜瀹夊叏鎬ф鏌ワ紝鏂規(guī)硶鏄冨療/etc涓嬬殑passwd鏂囦歡錛屾鏌ュ叾涓殑passwd瀛楁錛堢浜屽瓧孌碉級鏄惁涓?#8221;*”錛屽涓嶄負”*”錛屽垯琛ㄧず璇ョ敤鎴鋒病鏈夎緗瘑鐮侊紝鏄劇ず鍑鴻繖浜涚敤鎴峰悕錛堢涓瀛楁錛夈傛垜浠彲浠ョ敤濡備笅璇彞瀹炵幇錛?/p>

#awk -F: ‘$2==”" {printf(”%s no password!n”,$1′ /etc/passwd

      鍦ㄨ繖涓ず渚嬩腑錛宲asswd鏂囦歡鐨勫瓧孌靛垎闅旂鏄?#8220;錛?#8221;錛屽洜姝わ紝蹇呴』鐢?F錛氭潵鏇存敼榛樿鐨勫瓧孌靛垎闅旂錛岃繖涓ず渚嬩腑涔熸秹鍙婂埌浜嗗唴緗嚱鏁皃rintf鐨勪嬌鐢ㄣ?/p>

鍏乤wk鐨勫彉閲?/p>

      濡傚悓鍏跺畠紼嬪簭璁捐璇█涓鏍鳳紝awk鍏佽鍦ㄧ▼搴忚璦涓緗彉閲忥紝浜嬪疄涓婏紝鎻愪緵鍙橀噺鐨勫姛鑳芥槸紼嬪簭璁捐璇█鐨勫叾鏈姹傦紝涓嶆彁渚涘彉閲忕殑紼嬪簭璁捐璇█鏈漢榪樹粠鏈榪囥?/p>

      awk 鎻愪緵涓ょ鍙橀噺錛屼竴縐嶆槸awk鍐呯疆鐨勫彉閲忥紝榪欏墠闈㈡垜浠凡緇忚榪囷紝闇瑕佺潃閲嶆寚鍑虹殑鏄紝涓庡悗闈㈡彁鍒扮殑鍏跺畠鍙橀噺涓嶅悓鐨勬槸錛屽湪awk紼嬪簭涓紩鐢ㄥ唴緗彉閲忎笉闇瑕佷嬌鐢ㄦ爣蹇楃”$”錛堝洖蹇嗕竴涓嬪墠闈㈣榪囩殑NR鐨勪嬌鐢級銆俛wk鎻愪緵鐨勫彟涓縐嶅彉閲忔槸鑷畾涔夊彉閲忋俛wk鍏佽鐢ㄦ埛鍦╝wk紼嬪簭璇彞涓畾涔夊茍璋冪敤鑷凡鐨勫彉閲忋傚綋鐒惰繖縐嶅彉閲忎笉鑳戒笌鍐呯疆鍙橀噺鍙婂叾瀹僡wk淇濈暀瀛楃浉鍚岋紝鍦╝wk涓紩鐢ㄨ嚜瀹氫箟鍙橀噺蹇呴』鍦ㄥ畠鍓嶉潰鍔犱笂鏍囧織絎?#8221;$”銆備笌C璇█涓嶅悓鐨勬槸錛宎wk涓笉闇瑕佸鍙橀噺榪涜鍒濆鍖栵紝 awk鏍規(guī)嵁鍏跺湪awk涓涓嬈″嚭鐜扮殑褰㈠紡鍜屼笂涓嬫枃紜畾鍏跺叿浣撶殑鏁版嵁綾誨瀷銆傚綋鍙橀噺綾誨瀷涓嶇‘瀹氭椂錛宎wk榛樿鍏朵負瀛楃涓茬被鍨嬨傝繖閲屾湁涓涓妧宸э細濡傛灉浣犺璁╀綘鐨?awk紼嬪簭鐭ラ亾浣犳墍浣跨敤鐨勫彉閲忕殑鏄庣‘綾誨瀷錛屼綘搴斿綋鍦ㄥ湪紼嬪簭涓粰瀹冭祴鍒濆箋傚湪鍚庨潰鐨勫疄渚嬩腑錛屾垜浠皢鐢ㄥ埌榪欎竴鎶宸с?/p>

涓冦佽繍綆椾笌鍒ゆ柇

      浣滀負涓縐嶇▼搴忚璁¤璦鎵搴斿叿鏈夌殑鐗圭偣涔嬩竴錛宎wk鏀寔澶氱榪愮畻錛岃繖浜涜繍綆椾笌C璇█鎻愪緵鐨勫嚑鏈浉鍚岋細濡?銆?銆?銆?銆?絳夌瓑錛屽悓鏃訛紝awk涔熸敮鎸丆璇█涓被浼?+銆?#8211;銆?=銆?=銆?+銆?-涔嬬被鐨勫姛鑳斤紝榪欑粰鐔熸?zhèn)塁璇█鐨勪嬌鐢ㄨ呯紪鍐檃wk紼嬪簭甯︽潵浜嗘瀬澶х殑鏂逛究銆備綔涓哄榪愮畻鍔熻兘鐨勪竴縐嶆墿灞曪紝awk榪樻彁渚涗簡涓緋誨垪鍐呯疆鐨勮繍綆楀嚱鏁幫紙濡俵og銆乻qr銆乧os銆乻in絳夌瓑錛夊拰涓浜涚敤浜庡瀛楃涓茶繘琛屾搷浣滐紙榪愮畻錛夌殑鍑芥暟錛堝length銆乻ubstr絳夌瓑錛夈傝繖浜涘嚱鏁扮殑寮曠敤澶уぇ鐨勬彁楂樹簡awk鐨勮繍綆楀姛鑳姐?/p>

      浣滀負瀵規(guī)潯浠惰漿縐繪寚浠ょ殑涓閮ㄥ垎錛屽叧緋誨垽鏂槸姣忕紼嬪簭璁捐璇█閮藉叿澶囩殑鍔熻兘錛宎wk涔熶笉渚嬪銆?awk涓厑璁歌繘琛屽縐嶆祴璇曪紝濡傚父鐢ㄧ殑==錛堢瓑浜庯級銆侊紒=錛堜笉絳変簬錛夈?gt;錛堝ぇ浜庯級銆?lt;錛堝皬浜庯級銆?gt;=錛堝ぇ浜庣瓑浜庯級銆?gt;=錛堝皬浜庣瓑浜庯級絳夌瓑錛屽悓鏃訛紝浣滀負鏍峰紡鍖歸厤錛岃繕鎻愪緵浜唦錛堝尮閰嶄簬錛夊拰錛亊錛堜笉鍖歸厤浜庯級鍒ゆ柇銆?/p>

       浣滀負瀵規(guī)祴璇曠殑涓縐嶆墿鍏咃紝awk涔熸敮鎸佺敤閫昏緫榪愮畻絎?!(闈?銆?amp;&錛堜笌錛夈亅|錛堟垨錛夊拰鎷彿錛堬級榪涜澶氶噸鍒ゆ柇錛岃繖澶уぇ澧炲己浜哸wk鐨勫姛鑳姐傛湰鏂囩殑闄勫綍涓垪鍑轟簡awk鎵鍏佽鐨勮繍綆椼佸垽鏂互鍙婃搷浣滅鐨勪紭鍏堢駭銆?/p>

鍏乤wk鐨勬祦紼嬫帶鍒?/p>

      嫻佺▼鎺у埗璇彞鏄換浣曠▼搴忚璁¤璦閮戒笉鑳界己灝戠殑閮ㄥ垎銆備換浣曞ソ鐨勮璦閮芥湁涓浜涙墽琛屾祦紼嬫帶鍒剁殑璇彞銆俛wk鎻愪緵鐨勫畬澶囩殑嫻佺▼鎺у埗璇彞綾諱技浜嶤璇█錛岃繖緇欐垜浠紪紼嬪甫鏉ヤ簡鏋佸ぇ鐨勬柟渚褲?/p>

1銆丅EGIN鍜孍ND:

      鍦╝wk 涓袱涓壒鍒殑琛ㄨ揪寮忥紝BEGIN鍜孍ND錛岃繖涓よ呴兘鍙敤浜巔attern涓紙鍙傝冨墠闈㈢殑awk璇硶錛夛紝鎻愪緵BEGIN鍜孍ND鐨勪綔鐢ㄦ槸緇欑▼搴忚祴浜堝垵濮嬬姸鎬佸拰鍦ㄧ▼搴忕粨鏉熶箣鍚庢墽琛屼竴浜涙壂灝劇殑宸ヤ綔銆備換浣曞湪BEGIN涔嬪悗鍒楀嚭鐨勬搷浣滐紙鍦▄}鍐咃級灝嗗湪awk寮濮嬫壂鎻忚緭鍏ヤ箣鍓嶆墽琛岋紝鑰孍ND涔嬪悗鍒楀嚭鐨勬搷浣滃皢鍦ㄦ壂鎻忓畬鍏ㄩ儴鐨勮緭鍏ヤ箣鍚庢墽琛屻傚洜姝わ紝閫氬父浣跨敤BEGIN鏉ユ樉紺哄彉閲忓拰棰勭疆錛堝垵濮嬪寲錛夊彉閲忥紝浣跨敤END鏉ヨ緭鍑烘渶緇堢粨鏋溿?/p>

      渚嬶細绱閿鍞枃浠秞s涓殑閿鍞噾棰濓紙鍋囪閿鍞噾棰濆湪璁板綍鐨勭涓夊瓧孌碉級錛?/p>

$awk
>’BEGIN { FS=”:”;print “緇熻閿鍞噾棰?#8221;;total=0}
>{print $3;total=total+$3;}
>END {printf “閿鍞噾棰濇昏錛?.2f”,total}’ sx
錛堟敞錛?gt;鏄痵hell鎻愪緵鐨勭浜屾彁紺虹錛屽瑕佸湪shell紼嬪簭awk璇彞鍜宎wk璇█涓崲琛岋紝鍒欓渶鍦ㄨ灝懼姞鍙嶆枩鏉狅級

      鍦ㄨ繖閲岋紝BEGIN棰勭疆浜嗗唴閮ㄥ彉閲廎S錛堝瓧孌靛垎闅旂錛夊拰鑷畾涔夊彉閲弔otal,鍚屾椂鍦ㄦ壂鎻忎箣鍓嶆樉紺哄嚭杈撳嚭琛屽ご銆傝孍ND鍒欏湪鎵弿瀹屾垚鍚庢墦鍗板嚭鎬誨悎璁°?/p>

      2銆佹祦紼嬫帶鍒惰鍙?/p>

      awk鎻愪緵浜嗗畬澶囩殑嫻佺▼鎺у埗璇彞錛屽叾鐢ㄦ硶涓嶤璇█綾諱技銆備笅闈㈡垜浠竴涓鍔犱互璇存槑錛?/p>

2.1銆乮f…else璇彞:

鏍煎紡錛?br>if(琛ㄨ揪寮?
璇彞1
else
璇彞2

鏍煎紡涓?#8221;璇彞1″鍙互鏄涓鍙ワ紝濡傛灉浣犱負浜嗘柟渚縜wk鍒ゆ柇涔熸柟渚夸綘鑷凡闃呰錛屼綘鏈濂藉皢澶氫釜璇彞鐢▄}鎷搗鏉ャ俛wk鍒嗘灊緇撴瀯鍏佽宓屽錛屽叾鏍煎紡涓猴細

if(琛ㄨ揪寮?錛?br>{if(琛ㄨ揪寮?錛?br>璇彞1
else
璇彞2
}
璇彞3
else {if(琛ㄨ揪寮?)
璇彞4
else
璇彞5
}
璇彞6

褰撶劧瀹為檯鎿嶄綔榪囩▼涓綘鍙兘涓嶄細鐢ㄥ埌濡傛澶嶆潅鐨勫垎鏋濈粨鏋勶紝榪欓噷鍙槸涓轟簡緇欏嚭鍏舵牱寮忕艦浜嗐?/p>

2.2銆亀hile璇彞

鏍煎紡涓?

while(琛ㄨ揪寮?
璇彞

2.3銆乨o-while璇彞

鏍煎紡涓?

do
{
璇彞
}while(鏉′歡鍒ゆ柇璇彞錛?/p>

2.4銆乫or璇彞

鏍煎紡涓猴細

for(鍒濆琛ㄨ揪寮?緇堟鏉′歡;姝ラ暱琛ㄨ揪寮?
{璇彞}

      鍦╝wk 鐨?while銆乨o-while鍜宖or璇彞涓厑璁鎬嬌鐢╞reak,continue璇彞鏉ユ帶鍒舵祦紼嬭蛋鍚戯紝涔熷厑璁鎬嬌鐢╡xit榪欐牱鐨勮鍙ユ潵閫鍑恒俠reak 涓柇褰撳墠姝e湪鎵ц鐨勫驚鐜茍璺沖埌寰幆澶栨墽琛屼笅涓鏉¤鍙ャ俢ontinue浠庡綋鍓嶄綅緗煩鍒板驚鐜紑濮嬪鎵ц銆傚浜巈xit鐨勬墽琛屾湁涓ょ鎯呭喌錛氬綋exit璇彞涓嶅湪 END涓椂錛屼換浣曟搷浣滀腑鐨別xit鍛戒護琛ㄧ幇寰楀鍚屽埌浜嗘枃浠跺熬錛屾墍鏈夋ā寮忔垨鎿嶄綔鎵ц灝嗗仠姝紝END妯″紡涓殑鎿嶄綔琚墽琛屻傝屽嚭鐜板湪END涓殑exit灝嗗鑷寸▼搴忕粓姝€?/p>

渚嬶細涓轟簡

涔?jié)銆乤wk涓殑鑷畾涔夊嚱鏁?/p>

      瀹氫箟鍜岃皟鐢ㄧ敤鎴瘋嚜宸辯殑鍑芥暟鏄嚑涔庢瘡涓珮綰ц璦閮藉叿鏈夌殑鍔熻兘錛宎wk涔熶笉渚嬪錛屼絾鍘熷鐨刟wk騫朵笉鎻愪緵鍑芥暟鍔熻兘錛屽彧鏈夊湪nawk鎴栬緝鏂扮殑awk鐗堟湰涓墠鍙互澧炲姞鍑芥暟銆?/p>

鍑芥暟鐨勪嬌鐢ㄥ寘鍚袱閮ㄥ垎錛氬嚱鏁扮殑瀹氫箟涓庡嚱鏁拌皟鐢ㄣ傚叾涓嚱鏁板畾涔夊張鍖呮嫭瑕佹墽琛岀殑浠g爜錛堝嚱鏁版湰韜級鍜屼粠涓葷▼搴忎唬鐮佷紶閫掑埌璇ュ嚱鏁扮殑涓存椂璋冪敤銆?/p>

awk鍑芥暟鐨勫畾涔夋柟娉曞涓嬶細

function 鍑芥暟鍚?鍙傛暟琛?{
鍑芥暟浣?br>}

      鍦╣awk涓厑璁稿皢function鐪佺暐涓篺unc錛屼絾鍏跺畠鐗堟湰鐨刟wk涓嶅厑璁搞傚嚱鏁板悕蹇呴』鏄竴涓悎娉曠殑鏍囧織絎︼紝鍙傛暟琛ㄤ腑鍙互涓嶆彁渚涘弬鏁幫紙浣嗗湪璋冪敤鍑芥暟鏃跺嚱鏁板悕鍚庣殑涓瀵規(guī)嫭鍙蜂粛鐒舵槸涓嶅彲緙哄皯鐨勶級錛屼篃鍙互鎻愪緵涓涓垨澶氫釜鍙傛暟銆備笌C璇█鐩鎬技錛宎wk鐨勫弬鏁頒篃鏄氳繃鍊兼潵浼犻掔殑銆?/p>

      鍦╝wk 涓皟鐢ㄥ嚱鏁版瘮杈冪畝鍗曪紝鍏舵柟娉曚笌C璇█鐩鎬技錛屼絾awk姣擟璇█鏇翠負鐏墊椿錛屽畠涓嶆墽琛屽弬鏁版湁鏁堟ф鏌ャ傛崲鍙ヨ瘽璇達紝鍦ㄤ綘璋冪敤鍑芥暟鏃訛紝鍙互鍒楀嚭姣斿嚱鏁伴璁★紙鍑芥暟瀹氫箟涓瀹氾級鐨勫鎴栧皯鐨勫弬鏁幫紝澶氫綑鐨勫弬鏁頒細琚玜wk鎵蹇界暐錛岃屼笉瓚崇殑鍙傛暟錛宎wk灝嗗畠浠疆涓虹己鐪佸?鎴栫┖瀛楃涓詫紝鍏蜂綋緗負浣曞鹼紝灝嗗彇鍐充簬鍙傛暟鐨勪嬌鐢ㄦ柟寮忋?/p>

      awk鍑芥暟鏈変袱縐嶈繑鍥炴柟寮忥細闅愬紡榪斿洖鍜屾樉寮忚繑鍥炪傚綋awk鎵ц鍒板嚱鏁扮殑緇撳熬鏃訛紝瀹冭嚜鍔ㄥ湴榪斿洖鍒拌皟鐢ㄧ▼搴忥紝榪欐槸鍑芥暟鏄殣寮忚繑鍥炵殑銆傚鏋滈渶瑕佸湪緇撴潫涔嬪墠閫鍑哄嚱鏁幫紝鍙互鏄庣‘鍦頒嬌鐢ㄨ繑鍥炶鍙ユ彁鍓嶉鍑恒傛柟娉曟槸鍦ㄥ嚱鏁頒腑浣跨敤褰㈠錛歳eturn 榪斿洖鍊?鏍煎紡鐨勮鍙ャ?/p>

      渚嬶細涓嬮潰鐨勪緥瀛愭紨紺轟簡鍑芥暟鐨勪嬌鐢ㄣ傚湪榪欎釜紺轟緥涓紝瀹氫箟浜嗕竴涓悕涓簆rint_header鐨勫嚱鏁幫紝璇ュ嚱鏁拌皟鐢ㄤ簡涓や釜鍙傛暟FileName鍜孭ageNum錛?FileName鍙傛暟浼犵粰鍑芥暟褰撳墠浣跨敤鐨勬枃浠跺悕錛孭ageNum鍙傛暟鏄綋鍓嶉〉鐨勯〉鍙楓傝繖涓嚱鏁扮殑鍔熻兘鏄墦鍗幫紙鏄劇ず錛夊嚭褰撳墠鏂囦歡鐨勬枃浠跺悕錛屽拰褰撳墠欏電殑欏靛彿銆傚畬鎴愯繖涓姛鑳藉悗錛岃繖涓嚱鏁板皢榪斿洖涓嬩竴欏電殑欏靛彿銆?/p>

nawk
>’BEGIN{pageno=1;file=FILENAME
>pageno=print_header(file錛宲ageno)錛?璋冪敤鍑芥暟print_header
>printf(”褰撳墠欏甸〉鍙鋒槸錛?dn”,pageno);
>}

>#瀹氫箟鍑芥暟print_header
>function print_header(FileName,PageNum){
>printf(”%s %dn”,FileName,PageNum); >PageNum++;return PageNUm;
>}
>}’ myfile

      鎵ц榪欎釜紼嬪簭灝嗘樉紺哄涓嬪唴瀹癸細

myfile 1
褰撳墠欏甸〉鍙鋒槸錛?

鍗併乤wk楂樼駭杈撳叆杈撳嚭

      1.璇誨彇涓嬩竴鏉¤褰曪細

      awk鐨刵ext璇彞瀵艱嚧awk璇誨彇涓嬩竴涓褰曞茍瀹屾垚妯″紡鍖歸厤錛岀劧鍚庣珛鍗蟲墽琛岀浉搴旂殑鎿嶄綔銆傞氬父瀹冪敤鍖歸厤鐨勬ā寮忔墽琛屾搷浣滀腑鐨勪唬鐮併俷ext瀵艱嚧榪欎釜璁板綍鐨勪換浣曢澶栧尮閰嶆ā寮忚蹇界暐銆?/p>

      2.綆鍗曞湴璇誨彇涓鏉¤褰?/p>

      awk 鐨?getline璇彞鐢ㄤ簬綆鍗曞湴璇誨彇涓鏉¤褰曘傚鏋滅敤鎴鋒湁涓涓暟鎹褰曠被浼間袱涓墿鐞嗚褰曪紝閭d箞getline灝嗗挨鍏舵湁鐢ㄣ傚畠瀹屾垚涓鑸瓧孌電殑鍒嗙(璁劇疆瀛楁鍙橀噺$0 FNR NF NR)銆傚鏋滄垚鍔熷垯榪斿洖1錛屽け璐ュ垯榪斿洖0錛堝埌杈炬枃浠跺熬錛夈傚鏋滈渶綆鍗曞湴璇誨彇涓涓枃浠訛紝鍒欏彲浠ョ紪鍐欎互涓嬩唬鐮侊細

渚嬶細紺轟緥getline鐨勪嬌鐢?/p>

{while(getline==1)
{
#process the inputted fields
}
}

      涔熷彲浠ヤ嬌getline淇濆瓨杈撳叆鏁版嵁鍦ㄤ竴涓瓧孌典腑錛岃屼笉鏄氳繃浣跨敤getline variable鐨勫艦寮忓鐞嗕竴鑸瓧孌點傚綋浣跨敤榪欑鏂瑰紡鏃訛紝NF琚疆鎴?錛孎NR鍜孨R琚鍊箋?/p>

      鐢ㄦ埛涔熷彲浠ヤ嬌鐢╣etline<"filename"鏂瑰紡浠庝竴涓粰瀹氱殑鏂囦歡涓緭鍏ユ暟鎹紝鑰屼笉鏄粠鍛戒護琛屾墍鍒楀唴瀹硅緭鍏ユ暟鎹傛鏃訛紝getline灝嗗畬鎴愪竴鑸瓧孌靛垎紱伙紙璁劇疆瀛楁鍙橀噺$0鍜孨F)銆傚鏋滄枃浠朵笉瀛樺湪錛岃繑鍥?1,鎴愬姛錛岃繑鍥?,榪斿洖0琛ㄧず澶辮觸銆傜敤鎴峰彲浠ヤ粠緇欏畾鏂囦歡涓鍙栨暟鎹埌涓涓彉閲忎腑錛屼篃鍙互鐢╯tdin(鏍囧噯杈撳叆璁懼錛夋垨涓涓寘鍚繖涓枃浠跺悕鐨勫彉閲忎唬鏇縡ilename銆傚煎緱娉ㄦ剰鐨勬槸褰撲嬌鐢ㄨ繖縐嶆柟寮忔椂涓嶄慨鏀笷NR鍜孨R銆?/p>

      鍙︿竴縐嶄嬌鐢╣etline璇彞鐨勬柟娉曟槸浠嶶NIX鍛戒護鎺ュ彈杈撳叆錛屼緥濡備笅闈㈢殑渚嬪瓙:

渚嬶細紺轟緥浠嶶NIX鍛戒護鎺ュ彈杈撳叆

{while("who -u"|getline)
{
#process each line from the who command
}
}

褰撶劧錛屼篃鍙互浣跨敤濡備笅褰㈠紡:

"command" | getline variable

      3.鍏抽棴鏂囦歡:

      awk涓厑璁稿湪紼嬪簭涓叧闂竴涓緭鍏ユ垨杈撳嚭鏂囦歡錛屾柟娉曟槸浣跨敤awk鐨刢lose璇彞銆?/p>

close("filename"t

      filename鍙互鏄痝etline鎵撳紑鐨勬枃浠訛紙涔熷彲浠ユ槸stdin,鍖呭惈鏂囦歡鍚嶇殑鍙橀噺鎴栬単etline浣跨敤鐨勭‘鍒囧懡浠わ級銆傛垨涓涓緭鍑烘枃浠訛紙鍙互鏄痵tdout錛屽寘鍚枃浠跺悕鐨勫彉閲忔垨浣跨敤綆¢亾鐨勭‘鍒囧懡浠わ級銆?/p>

      4.杈撳嚭鍒頒竴涓枃浠?

awk涓厑璁哥敤濡備笅鏂瑰紡灝嗙粨鏋滆緭鍑哄埌涓涓枃浠訛細

printf("hello word!n"t>“datafile”
鎴?br>printf(”hello word!n”t>>”datafile”

      5.杈撳嚭鍒頒竴涓懡浠?/p>

awk涓厑璁哥敤濡備笅鏂瑰紡灝嗙粨鏋滆緭鍑哄埌涓涓懡浠わ細

printf(”hello word!n”t|”sort-t’,'”

鍗佷竴銆乤wk涓巗hell script娣峰悎緙栫▼

      鍥犱負awk鍙互浣滀負涓涓猻hell鍛戒護浣跨敤錛屽洜姝wk鑳戒笌shell鎵瑰鐞嗙▼搴忓緢濂界殑铻嶅悎鍦ㄤ竴璧鳳紝榪欑粰瀹炵幇awk涓巗hell紼嬪簭鐨勬販鍚堢紪紼嬫彁渚涗簡鍙兘銆傚疄鐜版販鍚堢紪紼嬬殑鍏抽敭鏄痑wk涓巗hell script涔嬮棿鐨勫璇濓紝鎹㈣█涔嬶紝灝辨槸awk涓巗hell script涔嬮棿鐨勪俊鎭氦嫻?awk浠巗hell script涓幏鍙栨墍闇鐨勪俊鎭紙閫氬父鏄彉閲忕殑鍊鹼級銆佸湪awk涓墽琛宻hell鍛戒護琛屻乻hell script灝嗗懡浠ゆ墽琛岀殑緇撴灉閫佺粰awk澶勭悊浠ュ強shell script璇誨彇awk鐨勬墽琛岀粨鏋滅瓑絳夈?/p>

1.awk璇誨彇Shell script紼嬪簭鍙橀噺

鍦╝wk涓垜浠彲浠ラ氳繃“’$鍙橀噺鍚?#8217;”鐨勬柟寮忚鍙杝ell scrpit紼嬪簭涓殑鍙橀噺銆?/p>

渚嬶細鍦ㄤ笅闈㈢殑紺轟緥涓紝鎴戜滑灝嗚鍙杝ell scrpit紼嬪簭涓殑鍙橀噺Name錛岃鍙橀噺瀛樻斁鐨勬槸鏂囨湰myfile鐨勬挵鍐欒咃紝awk灝嗘墦鍗板嚭榪欎釜浜哄悕銆?/p>

$cat writename
:
# @(#)
#
.
.
.
Name=”寮犱笁” nawk ‘BEGIN {name=”‘Name’”; printf(”t%st鎾板啓鑰?sn”,FILENAME,name”t;}
{…}END{…}’ myfile
.
.
.

2.灝唖hell鍛戒護鐨勬墽琛岀粨鏋滈佺粰awk澶勭悊

浣滀負淇℃伅浼犻佺殑涓縐嶆柟娉曪紝鎴戜滑鍙互灝嗕竴鏉hell鍛戒護鐨勭粨鏋滈氳繃綆¢亾綰匡紙|錛変紶閫掔粰awk澶勭悊錛?/p>

渚嬶細紺轟緥awk澶勭悊shell鍛戒護鐨勬墽琛岀粨鏋?/p>

$who -u | awk ‘{printf(”%s姝e湪鎵ц%sn”,$2,$1)}’

璇ュ懡浠ゅ皢鎵撳嵃鍑烘敞鍐岀粓绔鍦ㄦ墽琛岀殑紼嬪簭鍚嶃?/p>

3.shell script紼嬪簭璇籥wk鐨勬墽琛岀粨鏋?/p>

涓轟簡瀹炵幇shell script紼嬪簭璇誨彇awk鎵ц鐨勭粨鏋滐紝鎴戜滑鍙互閲囧彇涓浜涚壒孌婄殑鏂規(guī)硶錛屼緥濡傛垜浠彲浠ョ敤鍙橀噺鍚?`awk璇彞`鐨勫艦寮忓皢awk鎵ц鐨勭粨鏋滃瓨鏀懼叆涓涓?shell script鍙橀噺銆傚綋鐒朵篃鍙互鐢ㄧ閬撶嚎鐨勬柟娉曞皢awk鎵ц緇撴灉浼犻掔粰shell script紼嬪簭澶勭悊銆?/p>

渚嬶細浣滀負浼犻佹秷鎭殑鏈哄埗涔嬩竴錛孶NIX鎻愪緵浜嗕竴涓悜鍏舵墍鏈夌敤鎴蜂紶閫佹秷鎭殑鍛戒護wall錛堟剰鎬濇槸write to all鍐欑粰鎵鏈夌敤鎴鳳級錛岃鍛戒護鍏佽鍚戞墍鏈夊伐浣滀腑鐨勭敤鎴鳳紙緇堢錛夊彂閫佹秷鎭備負姝わ紝鎴戜滑鍙互閫氳繃涓孌祍hell鎵瑰鐞嗙▼搴弚all.shell鏉ユā鎷熻繖涓紼嬪簭錛堜簨瀹炰笂姣旇緝鑰佺殑鐗堟湰涓瓀all灝辨槸涓孌祍hell鎵瑰鐞嗙▼搴忥細

$cat wall.shell
:
# @(#) wall.shell:鍙戦佹秷鎭粰姣忎釜宸叉敞鍐岀粓绔?br>#
cat >/tmp/$$
#鐢ㄦ埛褰曞叆娑堟伅鏂囨湰 who -u | awk ‘{print $2}’ | while read tty
do
cat /tmp/$$>$tty
done

鍦ㄨ繖涓▼搴忛噷錛宎wk鎺ュ彈who -u鍛戒護鐨勬墽琛岀粨鏋滐紝璇ュ懡浠ゆ墦鍗板嚭鎵鏈夊凡娉ㄥ唽緇堢鐨勪俊鎭紝鍏朵腑絎簩涓瓧孌墊槸宸叉敞鍐岀粓绔殑璁懼鍚嶏紝鍥犳鐢╝wk鍛戒護鏋愬嚭璇ヨ澶囧悕錛岀劧鍚庣敤while read tty璇彞寰幆璇誨嚭榪欎簺鏂囦歡鍚嶅埌鍙橀噺錛坰hell script鍙橀噺錛塼ty涓紝浣滀負淇℃伅浼犻佺殑緇堢粨鍦板潃銆?/p>

4.鍦╝wk涓墽琛宻hell鍛戒護琛屸?宓屽叆鍑芥暟system()

system()鏄竴涓笉閫傚悎瀛楃鎴栨暟瀛楃被鍨嬬殑宓屽叆鍑芥暟錛岃鍑芥暟鐨勫姛鑳芥槸澶勭悊浣滀負鍙傛暟浼犻掔粰瀹冪殑瀛楃涓層俿ystem瀵硅繖涓弬鏁扮殑澶勭悊灝辨槸灝嗗叾浣滀負鍛戒護澶勭悊錛屼篃灝辨槸璇村皢鍏跺綋浣滃懡浠よ涓鏍峰姞浠ユ墽琛屻傝繖浣垮緱鐢ㄦ埛鍦ㄨ嚜宸辯殑awk紼嬪簭闇瑕佹椂鍙互鐏墊椿鍦版墽琛屽懡浠ゆ垨鑴氭湰銆?/p>

渚嬶細涓嬮潰鐨勭▼搴忓皢浣跨敤system宓屽叆鍑芥暟鎵撳嵃鐢ㄦ埛緙栧埗濂界殑鎶ヨ〃鏂囦歡錛岃繖涓枃浠跺瓨鏀懼湪鍚嶄負myreport.txt鐨勬枃浠朵腑銆備負綆綰﹁搗瑙侊紝鎴戜滑鍙垪鍑轟簡鍏禘ND閮ㄥ垎錛?/p>

.
.
.
END {close(”myreport.txt”t;system(”lp myreport.txt”t;}

鍦ㄨ繖涓ず渚嬩腑錛屾垜浠鍏堜嬌鐢╟lose璇彞鍏抽棴浜嗘枃浠秏yreport.txt鏂囦歡錛岀劧鍚庝嬌鐢╯ystem宓屽叆鍑芥暟灝唌yreport.txt閫佸叆鎵撳嵃鏈烘墦鍗般?/p>

鍐欏埌榪欓噷錛屾垜涓嶅緱涓嶈窡鏈嬪弸浠鍐嶈浜嗭紝瀹炲湪鍦拌錛岃繖浜涘唴瀹逛粛鐒舵槸awk鐨勫垵姝ョ煡璇嗭紝鐢?shù)鑴戞案杩滄槸鍓崢q涚殑縐戝錛宎wk涔熶笉渚嬪錛屾湰綃囨墍鑳藉仛鐨勫彧鏄湪浣犲墠琛岀殑婕極闀塊斾腑閾哄鉤涓孌靛皬灝忓紑绔紝鍓╀笅鐨勮礬榪樺緱闈犱綘鑷繁鍘昏蛋銆傝佸疄璇達紝濡傛灉鏈枃鐪熻兘緇欎綘鍓嶈鐨勮礬涓婂甫鏉ヤ簺璁哥殑鏂逛究錛岄偅鏈漢灝辯煡瓚充簡錛?/p>

濡傚鏈瘒鏈変換浣曠枒闂紝璇稥-mail To:Chizlong@yeah.net鎴栧埌涓婚〉http://chizling.yeah.net涓暀璦銆?br>闄勫綍錛?/p>

1.awk鐨勫父瑙勮〃杈懼紡鍏冨瓧絎?/p>

鎹㈢爜搴忓垪
^ 鍦ㄥ瓧絎︿覆鐨勫紑澶村紑濮嬪尮閰?br>$ 鍦ㄥ瓧絎︿覆鐨勭粨灝懼紑濮嬪尮閰?br>. 涓庝換浣曞崟涓瓧絎︿覆鍖歸厤
[ABC] 涓嶽]鍐呯殑浠諱竴瀛楃鍖歸厤
[A-Ca-c] 涓嶢-C鍙奱-c鑼冨洿鍐呯殑瀛楃鍖歸厤錛堟寜瀛楁瘝琛ㄩ『搴忥級
[^ABC] 涓庨櫎[]鍐呯殑鎵鏈夊瓧絎︿互澶栫殑浠諱竴瀛楃鍖歸厤
Desk|Chair 涓嶥esk鍜孋hair涓殑浠諱竴涓尮閰?br>[ABC][DEF] 鍏寵仈銆備笌A銆丅銆丆涓殑浠諱竴瀛楃鍖歸厤錛屼笖鍏跺悗瑕佽窡D銆丒銆丗涓殑浠諱竴涓瓧絎︺?br>* 涓嶢銆丅鎴朇涓換涓涓嚭鐜?嬈℃垨澶氭鐨勫瓧絎︾浉鍖歸厤
+ 涓嶢銆丅鎴朇涓換浣曚竴涓嚭鐜?嬈℃垨澶氭鐨勫瓧絎︾浉鍖歸厤
錛?涓庝竴涓┖涓叉垨A銆丅鎴朇鍦ㄤ換浣曚竴涓瓧絎︾浉鍖歸厤
錛圔lue|Black錛塨erry 鍚堝茍甯歌琛ㄨ揪寮忥紝涓嶣lueberry鎴朆lackberry鐩稿尮閰?/p>

2.awk綆楁湳榪愮畻絎?/p>

榪愮畻絎?鐢ㄩ?br>鈥斺斺斺斺斺?br>x^y x鐨剏嬈″箓
x**y 鍚屼笂
x%y 璁$畻x/y鐨勪綑鏁幫紙姹傛ā錛?br>x+y x鍔爕
x-y x鍑弝
x*y x涔榶
x/y x闄
-y 璐焬(y鐨勫紑鍏崇鍙?;涔熺О涓鐩噺
++y y鍔?鍚庝嬌鐢▂(鍓嶇疆鍔狅級
y++ 浣跨敤y鍊煎悗鍔?錛堝悗緙鍔狅級
–y y鍑?鍚庝嬌鐢▂(鍓嶇疆鍑忥級
y– 浣跨敤鍚巠鍑?(鍚庣紑鍑忥級
x=y 灝唝鐨勫艱祴緇檟
x+=y 灝唜+y鐨勫艱祴緇檟
x-=y 灝唜-y鐨勫艱祴緇檟
x*=y 灝唜*y鐨勫艱祴緇檟
x/=y 灝唜/y鐨勫艱祴緇檟 x%=y 灝唜%y鐨勫艱祴緇檟
x^=y 灝唜^y鐨勫艱祴緇檟
x**=y 灝唜**y鐨勫艱祴緇檟

3.awk鍏佽鐨勬祴璇曪細

鎿嶄綔絎?鍚箟

x==y x絳変簬y
x!=y x涓嶇瓑浜巠
x>y x澶т簬y
x>=y x澶т簬鎴栫瓑浜巠
xx<=y x灝忎簬鎴栫瓑浜巠?
x~re x鍖歸厤姝e垯琛ㄨ揪寮弐e?
x!~re x涓嶅尮閰嶆鍒欒〃杈懼紡re?

4.awk鐨勬搷浣滅(鎸変紭鍏堢駭鍗囧簭鎺掑垪)

= 銆?=銆?-=銆?*= 銆?= 銆?%=
||
&&
> >= < <= == != ~ !~
xy (瀛楃涓茶繛緇擄紝’x'’y'鍙樻垚”xy”錛?br>+ -
* / %
++ –

5.awk鍐呯疆鍙橀噺錛堥瀹氫箟鍙橀噺錛?/p>

璇存槑錛氳〃涓璿欏硅〃紺虹涓涓敮鎸佸彉閲忕殑宸ュ叿錛堜笅鍚岋級錛欰=awk錛孨=nawk,P=POSIX awk,G=gawk

V 鍙橀噺 鍚箟 緙虹渷鍊?br>鈥斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺?#8211;
N ARGC 鍛戒護琛屽弬鏁頒釜鏁?br>G ARGIND 褰撳墠琚鐞嗘枃浠剁殑ARGV鏍囧織絎?br>N ARGV 鍛戒護琛屽弬鏁版暟緇?br>G CONVFMT 鏁板瓧杞崲鏍煎紡 %.6g
P ENVIRON UNIX鐜鍙橀噺
N ERRNO UNIX緋葷粺閿欒娑堟伅
G FIELDWIDTHS 杈撳叆瀛楁瀹藉害鐨勭┖鐧藉垎闅斿瓧絎︿覆
A FILENAME 褰撳墠杈撳叆鏂囦歡鐨勫悕瀛?br>P FNR 褰撳墠璁板綍鏁?br>A FS 杈撳叆瀛楁鍒嗛殧絎?絀烘牸
G IGNORECASE 鎺у埗澶у皬鍐欐晱鎰?錛堝ぇ灝忓啓鏁忔劅錛?br>A NF 褰撳墠璁板綍涓殑瀛楁涓暟
A NR 宸茬粡璇誨嚭鐨勮褰曟暟
A OFMT 鏁板瓧鐨勮緭鍑烘牸寮?%.6g
A OFS 杈撳嚭瀛楁鍒嗛殧絎?絀烘牸
A ORS 杈撳嚭鐨勮褰曞垎闅旂 鏂拌
A RS 杈撳叆鐨勮褰曚粬闅旂 鏂拌
N RSTART 琚尮閰嶅嚱鏁板尮閰嶇殑瀛楃涓查
N RLENGTH 琚尮閰嶅嚱鏁板尮閰嶇殑瀛楃涓查暱搴?br>N SUBSEP 涓嬫爣鍒嗛殧絎?“34″

6.awk鐨勫唴緗嚱鏁?/p>

V 鍑芥暟 鐢ㄩ旀垨榪斿洖鍊?br>鈥斺斺斺斺斺斺斺斺斺斺斺斺斺斺斺?br>N gsub(reg,string,target) 姣忔甯歌琛ㄨ揪寮弐eg鍖歸厤鏃舵浛鎹arget涓殑string
N index(search,string) 榪斿洖string涓璼earch涓茬殑浣嶇疆
A length(string) 姹備覆string涓殑瀛楃涓暟
N match(string,reg) 榪斿洖甯歌琛ㄨ揪寮弐eg鍖歸厤鐨剆tring涓殑浣嶇疆
N printf(format,variable) 鏍煎紡鍖栬緭鍑猴紝鎸塮ormat鎻愪緵鐨勬牸寮忚緭鍑哄彉閲弙ariable銆?br>N split(string,store,delim) 鏍規(guī)嵁鍒嗙晫絎elim,鍒嗚Вstring涓簊tore鐨勬暟緇勫厓绱?br>N sprintf(format,variable) 榪斿洖涓涓寘鍚熀浜巉ormat鐨勬牸寮忓寲鏁版嵁錛寁ariables鏄鏀懼埌涓蹭腑鐨勬暟鎹?br>G strftime(format,timestamp) 榪斿洖涓涓熀浜巉ormat鐨勬棩鏈熸垨鑰呮椂闂翠覆錛宼imestmp鏄痵ystime()鍑芥暟榪斿洖鐨勬椂闂?br>N sub(reg,string,target) 絎竴嬈″綋甯歌琛ㄨ揪寮弐eg鍖歸厤錛屾浛鎹arget涓蹭腑鐨勫瓧絎︿覆
A substr(string,position,len) 榪斿洖涓涓互position寮濮媗en涓瓧絎︾殑瀛愪覆
P totower(string) 榪斿洖string涓搴旂殑灝忓啓瀛楃
P toupper(string) 榪斿洖string涓搴旂殑澶у啓瀛楃
A atan(x,y) x鐨勪綑鍒?寮у害)
N cos(x) x鐨勪綑寮?寮у害)
A exp(x) e鐨剎騫?br>A int(x) x鐨勬暣鏁伴儴鍒?br>A log(x) x鐨勮嚜鐒跺鏁板?br>N rand() 0-1涔嬮棿鐨勯殢鏈烘暟
N sin(x) x鐨勬寮?寮у害)
A sqrt(x) x鐨勫鉤鏂規(guī)牴
A srand(x) 鍒濆鍖栭殢鏈烘暟鍙戠敓鍣ㄣ傚鏋滃拷鐣錛屽垯浣跨敤system()
G system() 榪斿洖鑷?970騫?鏈?鏃ヤ互鏉ョ粡榪囩殑鏃墮棿錛堟寜縐掕綆楋級



megax 2008-03-11 14:08 鍙戣〃璇勮
]]>
[杞琞grep 鐢ㄦ硶http://www.shnenglu.com/megax/articles/44177.htmlmegaxmegaxTue, 11 Mar 2008 06:07:00 GMThttp://www.shnenglu.com/megax/articles/44177.htmlhttp://www.shnenglu.com/megax/comments/44177.htmlhttp://www.shnenglu.com/megax/articles/44177.html#Feedback0http://www.shnenglu.com/megax/comments/commentRss/44177.htmlhttp://www.shnenglu.com/megax/services/trackbacks/44177.html榪欑粍鍛戒護浠ユ寚瀹氭ā寮忔悳绱㈡枃浠訛紝騫墮氱煡鐢ㄦ埛鍦ㄤ粈涔堟枃浠朵腑鎼滅儲鍒頒笌鎸囧畾鐨勬ā寮忓尮閰嶇殑瀛楃涓詫紝騫舵墦鍗板嚭鎵鏈夊寘鍚瀛楃涓茬殑鏂囨湰琛岋紝鍦ㄨ鏂囨湰琛岀殑鏈鍓嶉潰鏄琛屾墍鍦ㄧ殑鏂囦歡鍚嶃?grep 鍛戒護涓嬈″彧鑳芥悳绱竴涓寚瀹氱殑妯″紡錛沞grep 鍛戒護媯绱㈡墿灞曠殑姝e垯琛ㄨ揪寮忥紙鍖呮嫭琛ㄨ揪寮忕粍鍜屽彲閫夐」錛夛紱fgrep 鍛戒護媯绱㈠浐瀹氬瓧絎︿覆錛屽畠涓嶈瘑鍒鍒欒〃杈懼紡錛屾槸蹇熸悳绱㈠懡浠ゃ?/p>

榪欑粍鍛戒護鍦ㄦ悳绱笌瀹氫綅鏂囦歡涓壒瀹氱殑涓婚鏂歸潰闈炲父鏈夌敤銆傝鎼滅儲鐨勬ā寮忓彲浠ヨ璁や負鏄竴浜涘叧閿瘝錛屾?zhèn)ㄥ彲浠ョ敤瀹冧滑鏉ユ悳鐑︽枃錃g涓寘鍚殑榪欎簺鍏抽敭璇嶃傜紪鍐欑▼搴忔椂錛屽彲浠ョ敤瀹冩潵瀵繪壘鏌愪竴涓嚱鏁幫紝鎴栨槸鐩稿叧鐨勮瘝緇勩俫rep 鍛戒護鐨勬悳绱㈠姛鑳芥瘮 fgrep 寮哄ぇ錛屽洜涓?grep 鍛戒護鐨勬悳绱㈡ā寮忓彲浠ユ槸姝e垯琛ㄨ揪寮忥紝鑰?fgrep 鍗翠笉鑳姐?/p>

璇ョ粍鍛戒護涓殑姣忎竴涓懡浠ら兘鏈変竴緇勯夐」錛屽埄鐢ㄨ繖浜涢夐」鍙互鏀瑰彉鍏惰緭鍑烘柟寮忋備緥濡傦紝鍙互鍦ㄦ悳绱㈠埌鐨勬枃鏈涓婂姞鍏ヨ鍙鳳紝鎴栬呭彧杈撳嚭鏂囨湰琛岀殑琛屽彿錛屾垨鑰呰緭鍑烘墍鏈変笌鎼滅儲妯″紡涓嶅尮閰嶇殑鏂囨湰琛岋紝鎴栧彧綆鍗曞湴杈撳嚭宸叉悳绱㈠埌鎸囧畾妯″紡鐨勬枃浠跺悕錛屽茍涓斿彲浠ユ寚瀹氬湪鏌ユ壘妯″紡鏃跺拷鐣ュぇ灝忓啓銆?/p>

榪欑粍鍛戒護鍦ㄦ寚瀹氭皷娣欒儧鍕燁挐鑳佹獛鐭h偨錛嫛銉呮稙鐢峰皬錛ㄧ換顛版尌鍏勪粯銊庡嫙顟儻铏奸鏇滈檯娣?涓鍙栥傛甯告儏鍐典笅錛屾瘡涓尮閰嶇殑琛岃鏄劇ず鍒版爣鍑嗚緭鍑恒傚鏋滆鏌ユ壘鐨勬枃浠舵槸澶氫釜錛屽垯鍦ㄦ瘡涓琛岃緭鍑轟箣鍓嶅姞涓婃枃浠跺悕銆?/p>

璇硶錛? grep [閫夐」] [鏌ユ壘妯″紡] [鏂囦歡鍚?錛屾枃浠跺悕2錛?#8230;…]  egrep [閫夐」] [鏌ユ壘妯″紡] [鏂囦歡鍚?錛屾枃浠跺悕2錛?#8230;…]  fgrep [閫夐」] [鏌ユ壘妯″紡] [鏂囦歡鍚?錛屾枃浠跺悕2錛?#8230;…]

璇ュ懡浠ょ殑鍚勯夐」鍚箟濡備笅錛?/strong>

-E 姣忎釜妯″紡浣滀負涓涓墿灞曠殑姝e垯琛ㄨ揪寮忓寰呫?-F 姣忎釜妯″紡浣滀負涓緇勫浐瀹氬瓧絎︿覆瀵瑰緟錛堜互鏂拌鍒嗛殧錛夛紝鑰屼笉浣滀負姝e垯琛ㄨ揪寮忋?-b 鍦ㄨ緭鍑虹殑姣忎竴琛屽墠鏄劇ず鍖呭惈鍖歸厤瀛楃涓茬殑琛屽湪鏂囦歡涓殑瀛楄妭鍋忕Щ閲忋?-c 鍙樉紺哄尮閰嶈鐨勬暟閲忋?-i 姣旇緝鏃朵笉鍖哄垎澶у皬鍐欍?-h 鍦ㄦ煡鎵懼涓枃浠舵椂錛屾寚紺篻rep涓嶈灝嗘枃浠跺悕鍔犲叆鍒拌緭鍑轟箣鍓嶃?-l 鏄劇ず棣栨鍖歸厤涓叉墍鍦ㄧ殑鏂囦歡鍚嶅茍鐢ㄦ崲琛岀灝嗗叾闅斿紑銆?   褰撳湪鏌愭枃浠朵腑澶氭鍑虹幇鍖歸厤涓叉椂錛屼笉閲嶅鏄劇ず姝ゆ枃浠跺悕銆?-n 鍦ㄨ緭鍑哄墠鍔犱笂鍖歸厤涓叉墍鍦ㄨ鐨勮鍙鳳紙鏂囦歡棣栬琛屽彿涓?錛夈?-v 鍙樉紺轟笉鍖呭惈鍖歸厤涓茬殑琛屻?-x 鍙樉紺烘暣琛屼弗鏍煎尮閰嶇殑琛屻?-e expression 鎸囧畾媯绱嬌鐢ㄧ殑妯″紡銆傜敤浜庨槻姝互“-”寮澶寸殑妯″紡琚В閲婁負鍛戒護閫夐」銆?-f expfile 浠巈xpfile鏂囦歡涓幏鍙栬鎼滅儲鐨勬ā寮忥紝涓涓ā寮忓崰涓琛屻?/pre>

瀵硅緇勫懡浠ょ殑浣跨敤榪橀渶娉ㄦ剰浠ヤ笅鏂歸潰錛?/p>

鍦ㄥ懡浠ゅ悗閿叆鎼滅儲鐨勬ā寮忥紝鍐嶉敭鍏ヨ鎼滅儲鐨勬枃浠躲傚叾涓紝鏂囦歡鍚嶅垪琛ㄤ腑涔熷彲浠ヤ嬌鐢ㄧ壒孌婂瓧絎︼紝濡?“*” 絳夛紝鐢ㄦ潵鐢熸垚鏂囦歡鍚嶅垪琛ㄣ傚鏋滄兂鍦ㄦ悳绱㈢殑妯″紡涓寘鍚湁絀烘牸鐨勫瓧絎︿覆錛屽彲浠ョ敤鍗曞紩鍙鋒妸瑕佹悳绱㈢殑妯″紡鎷搗鏉ワ紝鐢ㄦ潵琛ㄦ槑鎼滅儲鐨勬ā寮忔槸鐢卞寘鍚┖鏍肩殑瀛楃涓茬粍鎴愩傚惁鍒欙紝Shell 灝嗘妸絀烘牸璁や負鏄懡浠よ鍙傛暟鐨勫畾鐣岀錛岃?grep 鍛戒護灝嗘妸鎼滅儲妯″紡涓殑鍗曡瘝瑙i噴涓烘枃浠跺悕鍒楄〃涓殑涓閮ㄥ垎銆傚湪涓嬮潰鐨勪緥瀛愪腑錛実rep 鍛戒護鍦ㄦ枃浠?example 涓悳绱㈡ā寮?“text file”銆?/p>

grep ’text file’ example

鐢ㄦ埛鍙互鍦ㄥ懡浠よ涓婄敤Shell鐗規(guī)畩瀛楃鏉ョ敓鎴愬皢瑕佹悳绱㈢殑鏂囦歡鍚嶅垪琛ㄣ傚湪涓嬮潰鐨勪緥瀛愪腑錛岀壒孌婂瓧絎?#8220;*”鐢ㄦ潵鐢熸垚涓涓枃浠跺悕鍒楄〃錛岃鍒楄〃鍖呭惈褰撳墠鐩綍涓嬫墍鏈夌殑鏂囦歡銆傝鍛戒護灝嗘悳绱㈠嚭褰撳墠鐩綍涓嬫墍鏈夋枃浠朵腑涓庢ā寮忓尮閰嶇殑琛屻?/p>

grep data *

鐗規(guī)畩瀛楃鍦ㄦ悳绱竴緇勬寚瀹氱殑鏂囦歡鏃墮潪甯告湁鐢ㄣ備緥濡傦紝濡傛灉鎯蟲悳绱㈡墍鏈夌殑C紼嬪簭婧愭枃浠朵腑鐗瑰畾鐨勬ā寮忥紝鎮(zhèn)ㄥ彲浠ョ敤“*.c”鏉ユ寚瀹氭枃浠跺悕鍒楄〃銆傚亣璁劇敤鎴風殑 C紼嬪簭涓寘鍚竴浜涗笉蹇呰鐨勮漿鍚戣鍙ワ紙goto璇彞錛夛紝鎯寵鎵懼埌榪欎簺璇彞錛屽彲浠ョ敤濡備笅鐨勫懡浠ゆ潵鎼滅儲騫舵樉紺烘墍鏈夊寘鍚?goto璇彞鐨勪唬鐮佽錛?/p>

grep goto *.c

鐢ㄦ埛鍙互鍦ㄥ懡浠よ涓婇敭鍏ユ悳绱㈡ā寮忥紝涔熷彲浠ヤ嬌鐢?-f 閫夐」浠庢寚瀹氭枃浠朵腑璇誨彇瑕佹悳绱㈢殑妯″紡銆傚湪鏂囦歡涓紝姣忎釜鎼滅儲妯″紡鍗犱竴琛屻傚鏋滅粡甯歌鎼滅儲涓緇勫父瑙佸瓧絎︿覆鏃訛紝榪欎釜鍔熻兘闈炲父鏈夌敤銆傚湪涓嬮潰鐨勪緥瀛愪腑錛岀敤鎴瘋鍦ㄦ枃浠?exam 涓悳绱㈠瓧絎︿覆 “editor” 鍜?“create”錛屽氨鎶婅鎼滅儲鐨勬ā寮忔斁緗湪鏂囦歡 mypats 涓紝鐒跺悗錛実rep 鍛戒護浠庢枃浠?mypats 涓鍙栬鎼滅儲鐨勬ā寮忋?/p>

grep -f mypats exam


megax 2008-03-11 14:07 鍙戣〃璇勮
]]>[杞琞gawk 鎵嬪唽http://www.shnenglu.com/megax/articles/44176.htmlmegaxmegaxTue, 11 Mar 2008 06:06:00 GMThttp://www.shnenglu.com/megax/articles/44176.htmlhttp://www.shnenglu.com/megax/comments/44176.htmlhttp://www.shnenglu.com/megax/articles/44176.html#Feedback0http://www.shnenglu.com/megax/comments/commentRss/44176.htmlhttp://www.shnenglu.com/megax/services/trackbacks/44176.html澶囨敞錛?/p>

GAWK

絎竴绔?鍓嶈█
絎簩绔?綆浠?br>絎笁绔?璇誨彇杈撳叆妗f
絎洓绔?鍗板嚭
絎簲绔?Patterns
絎叚绔?綆楀紡(Expression)浣滀負Actions鐨勫彊榪?br>絎竷绔?Actions閲岄潰鐨勬帶鍒跺彊榪?br>絎叓绔?鍐呭緩鍑藉紡(Built-in Functions)
絎節(jié)绔?浣跨敤鑰呭畾涔夌殑鍑藉紡
絎崄绔?鈻′緥
絎崄涓绔?緇撹
錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛?/p>

絎竴绔?鍓嶈█

awk 鏄竴涓▼寮忚璦錛屽鏂艱祫鏂欑殑澶勭悊鍏鋒湁寰堝己鐨勫姛鑳姐傚鏂兼枃
瀛楁。閲岀殑璧勬枡鍋氫慨鏀廣佹瘮瀵廣佹娊鍙栫瓑鐨勫鐞嗭紝awk 鑳藉浠ュ緢鐭殑紼嬪紡
杞繪槗鍦板畬鎴愩傚鏋滀嬌鐢?C 鎴?Pascal 絳夎璦鍐欑▼寮忓畬鎴愪笂榪扮殑鍔ㄤ綔錛?br>浼氫笉鏂逛究涓斿緢鑺辮垂鏃墮棿錛屾墍鍐欑殑紼嬪紡涔熶細寰堝ぇ銆?/p>

awk 鑳藉渚濈収浣跨敤鑰呯殑瀹氫箟鏍煎紡鏉ュ垎瑙h緭鍏ヨ祫鏂欙紝涔熷彲渚濈収浣跨敤
鑰呭畾涔夌殑鏍煎紡鏉ュ嵃鍑鴻祫鏂欍?/p>

awk 鍚嶇О鐨勭敱鏉ユ槸鐢卞畠鐨勫師濮嬭璁¤呯殑濮撴皬涔嬬涓涓瓧姣嶈屽懡鍚?br>錛欰lfred V. Aho, Peter J. Weinberger, Brian W. Kernighan銆?br>awk鏈鍒濆湪1977騫村畬鎴愩備竴涓柊鐗堟湰鐨刟wk鍦?985騫磋鍙戣〃錛屽畠鐨勫姛鑳?br>姣旀棫鐗堟湰澧炲己涓嶅皯銆?/p>

gawk 鏄疓NU鎵鍋氱殑 awk錛実awk 鏈鍒濆湪1986騫村畬鎴愶紝涔嬪緦涓嶆柇鍦?br>琚敼榪涖佹洿鏂般俫awk 鍖呭惈 awk 鐨勬墍鏈夊姛鑳姐?/p>

寰寰岀殑 gawk 灝嗕互涓嬮潰鐨?涓緭鍏ユ。妗堟潵鍋氫緥瀛愯鏄庛?/p>

妗f’BBS-list’錛?br>aardvark 555-5553 1200/300 B
alpo-net 555-3412 2400/1200/300 A
barfly 555-7685 1200/300 A
bites 555-1675 2400/1200/300 A
camelot 555-0542 300 C
core 555-2912 1200/300 C
fooey 555-1234 2400/1200/300 B
foot 555-6699 1200/300 B
macfoo 555-6480 1200/300 A
sdace 555-3430 2400/1200/300 A
sabafoo 555-2127 1200/300 C

妗f’shipped’錛?br>Jan 13 25 15 115
Feb 15 32 24 226
Mar 15 24 34 228
Apr 31 52 63 420
May 16 34 29 208
Jun 31 42 75 492
Jul 24 34 67 436
Aug 15 34 47 316
Sep 13 55 37 277
Oct 29 54 68 525
Nov 20 87 82 577
Dec 17 35 61 401

Jan 21 36 64 620
Feb 26 58 80 652
Mar 24 75 70 495
Apr 21 70 74 514
絎簩绔?綆浠?/p>

gawk 鐨勪富瑕佸姛鑳芥槸閽堝妗f鐨勬瘡涓琛?line)鎼滃鎸囧畾鐨?patterns
銆傚綋涓琛岄噷鏈夌鍚堟寚瀹氱殑 patterns錛実awk 灝變細鍦ㄦ涓琛屾墽琛岃鎸囧畾
鐨?actions銆?gawk 渚濇鏂瑰紡澶勭悊杈撳叆妗f鐨勬瘡涓琛岀洿鍒拌緭鍏ユ。妗堢粨
鏉熴?/p>

gawk 紼嬪紡鏄敱寰堝鐨?pattern 涓?action 鎵緇勬垚錛宎ction 鍐欏湪
澶ф嫭鍙?{ } 閲岄潰錛屼竴涓猵attern寰岄潰灝辮窡钁椾竴涓猘ction銆傛暣涓?gawk 紼?br>寮忎細鍍忎笅闈㈢殑鏍峰瓙錛?/p>

pattern {action}
pattern {action}

鍦?gawk 紼嬪紡閲岄潰鐨勮鍒欙紝pattern 鎴?action 鑳藉琚渷鐣ワ紝浣?br>鏄袱涓笉鑳藉悓鏃惰鐪佺暐銆傚鏋?pattern 琚渷鐣ワ紝瀵規(guī)柤杈撳叆妗i噷闈㈢殑
姣忎竴琛岋紝action 閮戒細琚墽琛屻傚鏋?action 琚渷鐣ワ紝鍐呭畾鐨?action
鍒欎細鍗板嚭鎵鏈夌鍚?pattern 鐨勮緭鍏ヨ銆?br>2.1 濡備綍鎵цgawk紼嬪紡

鍩烘湰涓婏紝鏈?涓柟娉曞彲浠ユ墽琛実awk紼嬪紡銆?/p>

鈻″鏋?gawk 紼嬪紡寰堢煭錛屽垯 gawk 鍙互鐩存帴鍐欏湪 command line錛屽涓嬫墍紺猴細

gawk ‘program’ input-file1 input-file2 …

鍏朵腑 program 鍖呮嫭涓浜?pattern 鍜?action銆?/p>

鈻″鏋?gawk 紼嬪紡杈冮暱錛岃緝涓烘柟渚跨殑鍋氭硶鏄皢 gawk 紼嬪紡瀛樺湪涓涓。妗堬紝
鍗?patterns 涓?actions 鍐欏湪妗e悕涓?program-file 鐨勬。妗堥噷闈紝鎵ц
gawk 鐨勬牸寮忓涓嬫墍紺猴細

gawk -f program-file input-file1 input-file2 …

gawk 紼嬪紡鐨勬。妗堜笉姝竴涓椂錛屾墽琛実awk 鐨勬牸寮忓涓嬫墍紺猴細

gawk -f program-file1 -f program-file2 … input-file1
input-file2 …
2.2 涓涓畝鍗曠殑渚嬪瓙

鐜板湪鎴戜滑涓句竴涓畝鍗曠殑渚嬪瓙錛屽洜涓?gawk 紼嬪紡寰堢煭錛屾墍浠ュ皢 gawk 紼?br>寮忕洿鎺ュ啓鍦?command line銆?/p>

gawk ‘/foo/ {print $0}’ BBS-list

瀹為檯鐨?gawk 紼嬪紡涓?/foo/ {print $0}銆?foo/ 涓?pattern錛屾剰鎬濅負鎼?br>瀵昏緭鍏ユ。閲岀殑姣忎竴琛屾槸鍚﹀惈鏈夊瓙瀛椾覆 ‘foo’錛屽鏋滃惈鏈?‘foo’ 鍒欐墽琛?action銆?br>action 涓?print $0錛屾槸灝嗙幇鍦ㄨ繖涓琛岀殑鍐呭鍗板嚭銆侭BS-list 鏄緭鍏ョ殑妗f銆?/p>

鎵ц瀹屼笂榪版寚浠ゅ緦錛屼細鍗板嚭涓嬮潰鐨勭粨鏋滐細
fooey 555-1234 2400/1200/300 B
foot 555-6699 1200/300 B
macfoo 555-6480 1200/300 A
sabafoo 555-2127 1200/300 C
2.3 涓涓緝澶嶆潅鐨勪緥瀛?/p>

gawk ‘$1 == “Feb” {sum=$2+$3} END {print sum}’ shipped

鐜板湪榪欎釜渚嬪瓙浼氬皢杈撳叆妗?’shipped’ 鐨勭涓涓爮浣嶄笌 “Feb” 鍋氭瘮杈?br>錛屽鏋滅浉絳夛紝鍒欏叾瀵瑰簲鐨勭2鏍忎綅涓庣3鏍忎綅鐨勫間細琚姞鍒板彉鏁?sum銆?br>瀵規(guī)柤杈撳叆妗g殑姣忎竴琛岄噸澶嶄笂榪扮殑鍔ㄤ綔錛岀洿鍒拌緭鍏ユ。鐨勬瘡涓琛岄兘琚鐞?br>榪囦負姝€傛渶寰屽皢 sum 鐨勫煎嵃鍑恒侲ND {print sum} 鐨勬剰鎬濅負鍦ㄦ墍鏈夌殑杈?br>鍏ヨ瀹屼箣寰岋紝鎵ц涓嬈?print sum 鐨勫姩浣滐紝涔熷氨鏄妸 sum 鐨勫煎嵃鍑恒?/p>

涓嬮潰鏄墽琛岀殑緇撴灉錛?br>84
絎笁绔?璇誨彇杈撳叆妗f

gawk鐨勮緭鍏ュ彲浠ヤ粠鏍囧噯杈撳叆鎴栨寚瀹氱殑妗f閲岃鍙栥傝緭鍏ョ殑璇誨彇鍗?br>浣嶈縐頒負”璁板綍”(records)錛実awk 鍦ㄥ仛澶勭悊鏃訛紝鏄竴涓褰曚竴涓
褰曞湴澶勭悊銆傛瘡涓褰曠殑鍐呭畾鍊兼槸涓琛?line)錛屼竴涓褰曞張琚垎涓哄涓?br>鏍忎綅(fields)銆?br>3.1 濡備綍灝嗚緭鍏ュ垎瑙f垚璁板綍(records)

gawk 璇█浼氭妸杈撳叆鍒嗚В鎴愯褰?record)銆傝褰曚笌璁板綍涔嬮棿鏄互
record separator 闅斿紑錛宺ecord separator 鐨勫唴瀹氬兼槸琛ㄧず鏂頒竴琛岀殑
瀛楀厓(newline character)錛屽洜姝ゅ唴瀹氱殑 record separator 浣垮緱鏂囧瓧
鐨勬瘡涓琛屾槸涓涓褰曘?/p>

record separator 闅忚憲鍐呭緩鍙樻暟 RS 鐨勬敼鍙樿屾敼鍙樸俁S 鏄竴涓瓧涓詫紝
瀹冪殑鍐呭畾鍊兼槸”\n”銆備粎鏈?RS 鐨勭涓涓瓧鍏冩槸鏈夋晥鐨勶紝瀹冭褰撲綔 record
separator錛岃?RS 鐨勫叾瀹冨瓧鍏冧細琚拷鐣ャ?/p>

鍐呭緩鍙樻暟 FNR 浼氬偍瀛樼洰鍓嶇殑杈撳叆妗f宸茬粡琚鍙栫殑璁板綍涔嬩釜鏁般傚唴
寤哄彉鏁?NR 浼氬偍瀛樼洰鍓嶄負姝㈡墍鏈夌殑杈撳叆妗f宸茬粡琚鍙栫殑璁板綍涔嬩釜鏁般?br>3.2 鏍忎綅(field)

gawk 浼氳嚜鍔ㄥ皢姣忎釜璁板綍鍒嗚В鎴愬涓爮浣?(field)銆傜被浼兼柤瀛楀湪涓
琛岄噷闈紝gawk 鐨勫唴瀹氬姩浣滀細璁や負鏍忎綅涔嬮棿鏄互 whitespace 鍒嗗紑銆傚湪
gawk 閲岋紝whitespace 鐨勬剰鎬濇槸涓涓垨澶氫釜絀虹櫧鎴?tabs銆?/p>

鍦?gawk 紼嬪紡閲岄潰錛屼互’$1′琛ㄧず絎竴涓爮浣嶏紝’$2′琛ㄧず絎簩涓爮浣?br>錛屼緷姝ょ被鎺ㄣ備婦涓緥瀛愶紝鍋囪杈撳叆鐨勪竴琛屽涓嬫墍紺猴細

This seems like a pretty nice example.

絎竴涓爮浣嶆垨 $1 鏄?#8217;This’錛岀浜屼釜鏍忎綅鎴?$2 鏄?’seems’錛屼緷姝ょ被鎺ㄣ?br>鏈変釜鍦版柟鍊煎緱鐗瑰埆娉ㄦ剰錛岀涓冧釜鏍忎綅鎴?$7 鏄?#8217;example.’鑰岄潪’example’銆?/p>

涓嶈鏈夊灝戞爮浣嶏紝$NF 鍙敤鏉ヨ〃紺轟竴涓褰曠殑鏈寰屼竴涓爮浣嶃備互
涓婇潰鐨勪緥瀛愪負渚嬶紝$NF 涓?$7 鐩稿悓錛屼篃灝辨槸’example.’銆?/p>

NF 鏄竴涓唴寤哄彉鏁幫紝瀹冪殑鍊艱〃紺虹洰鍓嶈繖涓褰曚箣鏍忎綅鐨勪釜鏁般?/p>

$0錛岀湅璧鋒潵濂藉儚鏄闆朵釜鏍忎綅錛屽畠鏄竴涓壒渚嬶紝瀹冭〃紺烘暣涓褰曘?/p>

涓嬮潰鏄竴涓緝澶嶆潅鐨勪緥瀛愶細

gawk ‘$1~/foo/ {print $0}’ BBS-list

緇撴灉濡備笅錛?br>fooey 555-1234 2400/1200/300 B
foot 555-6699 1200/300 B
macfoo 555-6480 1200/300 A
sabafoo 555-2127 1200/300 C

榪欎釜渚嬪瓙鏄妸杈撳叆妗?#8217;BBS-list’鐨勬瘡涓褰曠殑絎竴涓爮浣嶄綔媯鏌ワ紝濡?br>鏋滃畠鍚湁瀛愬瓧涓?#8217;foo’錛屽垯榪欎竴涓褰曚細琚嵃鍑恒?br>3.3 濡備綍灝嗚褰曞垎瑙f垚鏍忎綅

gawk 鏍規(guī)嵁 field separator 灝嗕竴涓褰曞垎瑙f垚鏍忎綅銆俧ield sepa-
rator 浠ュ唴寤哄彉鏁?FS 琛ㄧず銆?/p>

涓句釜渚嬪瓙錛屽亣濡?field separator 鏄?#8217;oo’錛屽垯涓嬮潰鐨勮錛?/p>

moo goo gai pan

浼氳鍒嗘垚涓変釜鏍忎綅錛?#8217;m'銆?#8217; g’銆?#8217; gai pan’銆?/p>

鍦?gawk 紼嬪紡閲岋紝鍙互浣跨敤’='鏉ユ敼鍙?FS 鐨勫箋備緥濡?

gawk ‘BEGIN {FS=”,”}; {print $2}’

杈撳叆琛屽涓嬶細

John Q. Smith, 29 Oak St., Walamazoo, MI 42139

鎵цgawk鐨勭粨鏋滃皢鍗板嚭瀛椾覆 ‘ 29 Oak St.’銆侭EGIN 寰岄潰鐨?action 浼氬湪
絎竴涓褰曡璇誨彇涔嬪墠鎵ц涓嬈°?br>絎洓绔?鍗板嚭

鍦╣awk紼嬪紡閲岋紝actions 鏈甯稿仛鐨勪簨灝辨槸鍗板嚭(printing)銆傜畝鍗?br>鐨勫嵃鍑猴紝浣跨敤 printe鍙欒堪銆傚鏉傛牸寮忕殑鍗板嚭錛屼嬌鐢?printf 鍙欒堪銆?br>4.1 print鍙欒堪

print 鍙欒堪鐢ㄥ湪綆鍗曘佹爣鍑嗙殑杈撳嚭鏍煎紡銆傚彊榪扮殑鏍煎紡濡備笅鎵紺猴細

print item1, item2, …

杈撳嚭鏃訛紝鍚勪釜 item 涔嬮棿浼氫互涓涓┖鐧藉垎寮錛屾渶寰屼細鎹㈣(newline)銆?/p>

濡傛灉 ‘print’鍙欒堪涔嬪緦娌℃湁璺熻憲浠諱綍涓滆タ錛屽畠涓?#8217;print $0′鐨勬晥
鏋滀竴鏍鳳紝瀹冧細鍗板嚭鐜板湪鐨勮褰?record)銆傝鍗板嚭絀虹櫧琛屽彲浣跨敤’print
“”‘銆?鍗板嚭涓孌靛浐瀹氱殑鏂囧瓧錛屽彲鐢ㄥ弻寮曞彿灝嗘枃瀛楃殑涓よ竟鎷搗鏉ワ紝渚嬪
‘print “Hello there”‘銆?/p>

榪欓噷鏄竴涓緥瀛愶紝瀹冧細鎶婃瘡涓緭鍏ヨ褰曠殑鍓嶄簩涓爮浣嶅嵃鍑猴細

gawk ‘{print $1,$2}’ shipped

緇撴灉濡備笅鎵紺猴細
Jan 13
Feb 15
Mar 15
Apr 31
May 16
Jun 31
Jul 24
Aug 15
Sep 13
Oct 29
Nov 20
Dec 17

Jan 21
Feb 26
Mar 24
Apr 21
4.2 Output Separators

鍓嶉潰鎴戜滑宸叉彁榪囧鏋?print 鍙欒堪鍖呭惈鏈夊涓?item錛宨tem 涔嬮棿
鐢ㄩ楃偣鍒嗗紑錛屽垯鍗板嚭鏃跺悇涓猧tem浼氳涓涓┖鐧介殧寮銆備綘鑳藉浣跨敤浠諱綍
鐨勫瓧涓蹭綔涓?output field separator錛屽彲浠ョ粡鐢卞唴寤哄彉鏁?OFS 鐨勮
瀹氭潵鏇存敼 output field separator銆侽FS 鐨勫垵濮嬪間負” “錛屽嵆涓鏍肩殑
絀虹櫧銆?/p>

鏁翠釜 print 鍙欒堪鐨勮緭鍑鴻縐頒負 output record銆俻rint 鍙欒堪杈?br>鍑?output record 涔嬪緦錛屼細鎺ヨ憲杈撳嚭涓涓瓧涓詫紝姝ゅ瓧涓茬О涓?output
record separator銆傚唴寤哄彉鏁?ORS 鐢ㄦ潵鎸囨槑姝ゅ瓧涓層侽RS 鐨勫垵濮嬪?br>涓?“\n”錛屼篃灝辨槸鎹㈣銆?/p>

涓嬮潰榪欎釜渚嬪瓙浼氬嵃鍑烘瘡涓褰曠殑絎竴涓爮浣嶅拰絎簩涓爮浣嶏紝姝や簩
涓爮浣嶄箣闂翠互鍒嗗彿’;'鍒嗗紑錛屾瘡琛岃緭鍑轟箣寰屼細鍔犲叆涓涓┖鐧借銆?/p>

gawk ‘BEGIN {OFS=”;”; ORS=”\n\n”} {print $1, $2}’ BBS-list

緇撴灉濡備笅鎵紺猴細
aardvark;555-5553

alpo-net;555-3412

barfly;555-7685

bites;555-1675

camelot;555-0542

core;555-2912

fooey;555-1234

foot;555-6699

macfoo;555-6480

sdace;555-3430

sabafoo;555-2127

 

4.3 printf鍙欒堪

printf 鍙欒堪浼氫嬌寰楄緭鍑烘牸寮忚緝瀹規(guī)槗綺劇‘鍦版帶鍒躲俻rintf 鍙欒堪鍙互
鎸囧畾姣忎釜 item 鍗板嚭鐨勫搴︼紝涔熷彲浠ユ寚瀹氭暟瀛楃殑鍚勭鍨嬪紡銆?/p>

printf 鍙欒堪鐨勬牸寮忓涓嬶細

printf format, item1, item2, …

print 涓?printf 鐨勫樊鍒槸鍦ㄦ柤 format, printf 鐨勫紩鏁版瘮 print
澶氫簡瀛椾覆 format銆俧ormat 鐨勫瀷寮忎笌 ANSI C 鐨?printf 涔嬫牸寮忕浉鍚屻?/p>

printf 騫朵笉浼氬仛鑷姩鎹㈣鐨勫姩浣溿傚唴寤哄彉鏁?OFS 涓?ORS 瀵?printf 鍙?br>榪版病鏈変換浣曞獎鍝嶃?/p>

鏍煎紡鐨勬寚瀹氫互瀛楀厓’%'寮濮嬶紝寰岄潰鎺ヨ憲鏍煎紡鎺у埗瀛楁瘝銆?/p>

鏍煎紡鎺у埗瀛楁瘝濡備笅鎵紺猴細

‘c’ 灝嗘暟瀛椾互 ASCII 瀛楀厓鍗板嚭銆?br>渚嬪’printf “%C”,65′浼氬嵃鍑哄瓧鍏?#8217;A'銆?/p>

‘d’ 鍗板嚭鍗佽繘浣嶇殑鏁存暟銆?/p>

‘i’ 鍗板嚭鍗佽繘浣嶇殑鏁存暟銆?/p>

‘e’ 灝嗘暟瀛椾互縐戝絎﹀彿鐨勫艦寮忓嵃鍑恒?br>渚嬪

print “$4.3e”,1950

緇撴灉浼氬嵃鍑?#8217;1.950e+03′銆?/p>

‘f’ 灝嗘暟瀛椾互嫻偣鐨勫艦寮忓嵃鍑恒?/p>

‘g’ 灝嗘暟瀛椾互縐戝絎﹀彿鐨勫艦寮忔垨嫻偣鐨勫艦寮忓嵃鍑恒傛暟瀛楃殑緇濆鍊煎鏋?br>澶ф柤絳夋柤0.0001鍒欎互嫻偣鐨勫艦寮忓嵃鍑猴紝鍚﹀垯浠ョ瀛︾鍙風殑褰㈠紡鍗?br>鍑恒?/p>

‘o’ 鍗板嚭鏃犲彿鐨勫叓榪涗綅鏁存暟銆?/p>

’s’ 鍗板嚭涓涓瓧涓層?/p>

‘x’ 鍗板嚭鏃犲彿鐨勫崄鍏繘浣嶆暣鏁般?0鑷?5浠?#8217;a'鑷?#8217;f'琛ㄧず銆?/p>

‘X’ 鍗板嚭鏃犲彿鐨勫崄鍏繘浣嶆暣鏁般?0鑷?5浠?#8217;A'鑷?#8217;F”琛ㄧず銆?/p>

‘%’ 瀹冨茍涓嶆槸鐪熸鐨勬牸寮忔帶鍒跺瓧姣嶏紝’%%”灝嗗嵃鍑?#8221;%’銆?/p>

鍦?% 涓庢牸寮忔帶鍒跺瓧姣嶄箣闂村彲鍔犲叆 modifier錛宮odifier 鏄敤鏉ヨ繘涓
姝ユ帶鍒惰緭鍑虹殑鏍煎紡銆傚彲鑳界殑 modifier 濡備笅鎵紺猴細

‘-’ 浣跨敤鍦?width 涔嬪墠錛屾寚鏄庢槸鍚戝乏闈犻綈銆傚鏋?#8217;-'娌℃湁鍑虹幇錛屽垯浼氬湪
琚寚瀹氱殑瀹藉害鍚戝彸闈犻綈銆備緥濡傦細

printf “%-4S”, “foo”

浼氬嵃鍑?#8217;foo ‘銆?/p>

‘width’ 榪欎竴涓暟瀛楁寚紺虹浉瀵瑰簲鐨勬爮浣嶅嵃鍑烘椂鐨勫搴︺備緥濡傦細

printf “%4s”,”foo”

浼氬嵃鍑?#8217; foo’銆?/p>

width 鐨勫兼槸涓涓渶灝忓搴﹁岄潪鏈澶у搴︺傚鏋滀竴涓?item 鐨?br>鍊奸渶瑕佺殑瀹藉害姣?width 澶э紝鍒欎笉鍙?width 鐨勫獎鍝嶃備緥濡?/p>

printf “%4s”,”foobar”

灝嗗嵃鍑?#8217;foobar’銆?/p>

‘.prec’ 姝ゆ暟瀛楁寚瀹氬嵃鍑烘椂鐨勭簿紜害銆傚畠鎸囧畾灝忔暟鐐瑰彸杈圭殑浣嶆暟銆傚
鏋滄槸瑕佸嵃鍑轟竴涓瓧涓詫紝瀹冩寚瀹氭瀛椾覆鏈澶氫細琚嵃鍑哄灝戜釜瀛?br>鍏冦?br>絎簲绔?patterns

鍦?gawk 紼嬪紡閲岄潰錛屽綋 pattern 絎﹀悎鐜板湪鐨勮緭鍏ヨ褰?record)錛屽叾
鐩稿搴旂殑 action 鎵嶄細琚墽琛屻?br>5.1 Pattern鐨勭綾?/p>

榪欓噷瀵?gawk 鐨勫悇縐?pattern 鍨嬪紡浣滀竴鏁寸悊錛?/p>

/regular expression/
涓涓?regular expression 褰撲綔涓涓?pattern銆傛瘡褰撹緭鍏ヨ褰?(
record)鍚湁 regular expression 灝辮涓虹鍚堛?/p>

expression
涓涓崟涓鐨?expression銆傚綋涓涓間笉涓?0 鎴栦竴涓瓧涓蹭笉鏄┖鐨勶紝
鍒欏彲瑙嗕負絎﹀悎銆?/p>

pat1,pat2
涓瀵圭殑 patterns 浠ラ楀彿鍒嗗紑錛屾寚瀹氳褰曠殑鈻″洿銆?/p>

BEGIN
END
榪欐槸鐗瑰埆鐨?pattern, gawk 鍦ㄥ紑濮嬫墽琛屾垨瑕佺粨鏉熸椂浼氬垎鍒墽琛岀浉
瀵瑰簲鏂糂EGIN鎴朎ND鐨?action銆?/p>

null
榪欐槸涓涓┖鐨刾attern錛屽鏂兼瘡涓緭鍏ヨ褰曠殕瑙嗕負絎﹀悎pattern銆?br>5.2 Regular Expressions褰撲綔Patterns

涓涓?regular expression 鍙畝鍐欎負 regexp錛屾槸涓縐嶆弿榪板瓧涓茬殑鏂?br>娉曘備竴涓?regular expression 浠ユ枩綰?’/')鍖呭洿褰撲綔 gawk 鐨?pattern銆?/p>

濡傛灉杈撳叆璁板綍鍚湁 regexp 灝辮涓虹鍚堛備緥濡傦細pattern 涓?/foo/錛?br>瀵規(guī)柤浠諱綍杈撳叆璁板綍鍚湁’foo’鍒欒涓虹鍚堛?/p>

涓嬮潰鐨勪緥瀛愪細灝嗗惈鏈?#8217;foo’鐨勮緭鍏ヨ褰曚箣絎?涓爮浣嶅嵃鍑恒?/p>

gawk ‘/foo/ {print $2}’ BBS-list

緇撴灉濡備笅錛?br>555-1234
555-6699
555-6480
555-2127

regexp 涔熻兘浣跨敤鍦ㄦ瘮杈冪殑綆楀紡銆?/p>

exp ~ /regexp/
濡傛灉 exp 絎﹀悎 regexp錛屽垯緇撴灉涓虹湡(true)銆?/p>

exp !~ /regexp/
濡傛灉 exp 涓嶇鍚?regexp錛屽垯緇撴灉涓虹湡銆?br>5.3 姣旇緝鐨勭畻寮忓綋浣淧atterns

姣旇緝鐨?pattern 鐢ㄦ潵嫻嬭瘯涓や釜鏁板瓧鎴栧瓧涓茬殑鍏崇郴璇稿澶ф柤銆佺瓑鏂?br>銆佸皬鏂箋備笅闈㈠垪鍑轟竴浜涙瘮杈冪殑pattern錛?/p>

x x<=y 濡傛灉 x 灝忔柤銆佺瓑鏂?y錛屽垯緇撴灉涓虹湡銆?br>x>y 濡傛灉 x 澶ф柤 y錛屽垯緇撴灉涓虹湡銆?br>x>=y 濡傛灉 x 澶ф柤銆佺瓑鏂?y錛屽垯緇撴灉涓虹湡銆?br>x==y 濡傛灉 x 絳夋柤 y錛屽垯緇撴灉涓虹湡銆?br>x!=y 濡傛灉 x 涓嶇瓑鏂?y錛屽垯緇撴灉涓虹湡銆?br>x~y 濡傛灉 x 絎﹀悎 regular expression y錛屽垯緇撴灉涓虹湡銆?br>x!~y 濡傛灉 x 涓嶇鍚?regular expression y錛屽垯緇撴灉涓虹湡銆?/p>

涓婇潰鎵鎻愬埌鐨?x 涓?y錛屽鏋滀簩鑰呯殕鏄暟瀛楀垯瑙嗕負鏁板瓧涔嬮棿鐨勬瘮杈冿紝
鍚﹀垯瀹冧滑浼氳杞崲鎴愬瓧涓蹭笖浠ュ瓧涓茬殑褰㈠紡鍋氭瘮杈冦備袱涓瓧涓茬殑姣旇緝錛?br>浼氬厛姣旇緝絎竴涓瓧鍏冿紝鐒跺緦姣旇緝絎簩涓瓧鍏冿紝渚濇綾繪帹錛岀洿鍒版湁涓嶅悓
鐨勫湴鏂瑰嚭鐜頒負姝€傚鏋滀袱涓瓧涓插湪杈冪煭鐨勪竴涓粨鏉熶箣鍓嶆槸鐩哥瓑錛屽垯瑙?br>涓洪暱鐨勫瓧涓叉瘮鐭殑瀛椾覆澶с備緥濡?“10″ 姣?“9″ 灝忥紝”abc” 姣?“abcd” 灝忋?br>5.4 浣跨敤甯冩灄榪愮畻鐨凱atterns

涓涓竷鏋?boolean) pattern 鏄嬌鐢ㄥ竷鏋楄繍綆?#8221;鎴?#8221;(’||’)錛?#8221;鍙?#8221;
(’&&’)錛?#8221;鍙?#8221;(’!')鏉ョ粍鍚堝叾瀹冪殑pattern銆?br>渚嬪錛?/p>

gawk ‘/2400/ && /foo/’ BBS-list
gawk ‘/2400/ || /foo/’ BBS-list
gawk ‘! /foo/’ BBS-list
絎叚绔?綆楀紡(Expression)浣滀負Actions鐨勫彊榪?/p>

綆楀紡(Expression) 鏄痝awk紼嬪紡閲岄潰action鐨勫熀鏈瀯鎴愯呫?br>6.1 綆楁湳榪愮畻

gawk 閲岀殑綆楁湳榪愮畻濡備笅鎵紺猴細

x+y 鍔?br>x-y 鍑?br>-x 璐?br>+x 姝c傚疄闄呬笂娌℃湁浠諱綍褰卞搷銆?br>x*y 涔?br>x/y 闄?br>x%y 姹傞鏁般備緥濡?5%3=2銆?br>x^y
x**y x 鐨?y 嬈℃柟銆備緥濡?^3=8銆?br>6.2 姣旇緝綆楀紡涓庡竷鏋楃畻寮?/p>

姣旇緝綆楀紡 (comparison expression) 鐢ㄦ潵姣旇緝瀛椾覆鎴栨暟瀛楃殑鍏崇郴
錛岃繍綆楃鍙蜂笌 C 璇█鐩稿悓銆傝〃鍒楀涓嬶細

x x<=y
x>y
x>=y
x==y
x!=y
x~y
x!~y

姣旇緝鐨勭粨鏋滀負鐪?true)鍒欏叾鍊兼槸 1銆傚惁鍒欏叾鍊兼槸 0銆?/p>

甯冩灄綆楀紡(boolean expression)鏈変笅闈笁縐嶏細

boolean1 && boolean2
boolean1 || boolean2
! boolean
6.3 鏉′歡綆楀紡(Conditional Expressions)

涓涓潯浠跺紡綆楀紡鏄竴縐嶇壒鍒殑綆楀紡錛屽畠鍚湁3涓繍綆楀厓銆?br>鏉′歡寮忕畻寮忎笌C璇█鐨勭浉鍚岋細

selector ? if-true-exp : if-false-exp

瀹冩湁3涓瓙綆楀紡銆傜涓涓瓙綆楀紡selector 棣栧厛浼氳璁$畻銆傚鏋滄槸鐪?
鍒檌f-true-exp浼氳璁$畻涓斿畠鐨勫煎彉鎴愭暣涓畻寮忕殑鍊箋傚惁鍒檌f-false-
exp 浼氳璁$畻涓斿畠鐨勫煎彉鎴愭暣涓畻寮忕殑鍊箋?/p>

渚嬪涓嬮潰鐨勪緥瀛愪細浜х敓x鐨勭粷瀵瑰鹼細

x>0 ? x : -x
絎竷绔?Actions閲岄潰鐨勬帶鍒跺彊榪?/p>

鍦?gawk 紼嬪紡閲岄潰錛屾帶鍒跺彊榪拌濡?if銆亀hile 絳夋帶鍒剁▼寮忔墽琛岀殑嫻?br>紼嬨傚湪 gawk 閲岀殑鎺у埗鍙欒堪涓?C 鐨勭被浼箋?/p>

寰堝鐨勬帶鍒跺彊榪頒細鍖呮嫭鍏跺畠鐨勫彊榪幫紝琚寘鎷殑鍙欒堪縐頒負 body銆傚亣
濡?body 閲岄潰鍖呮嫭涓涓互涓婄殑鍙欒堪錛屽繀欏諱互澶ф嫭寮?{ } 灝嗚繖浜涘彊榪版嫭璧?br>鏉ワ紝鑰屽悇涓彊榪頒箣闂撮渶浠ユ崲琛?newline)鎴栧垎鍙烽殧寮銆?br>7.1 if 鍙欒堪

if (condition) then-body [else else-body]

濡傛灉 condition 涓虹湡(true)錛屽垯鎵ц then-body錛屽惁鍒欐墽琛?else-body銆?/p>

涓句竴涓緥瀛愬涓嬶細

if (x % 2 == 0)
print “x is even”
else
print “x is odd”
7.2 while 鍙欒堪

while (condition)
body

while 鍙欒堪鍋氱殑絎竴浠朵簨灝辨槸嫻嬭瘯 condition銆傚亣濡?condition 涓虹湡鍒?br>鎵ц body 鐨勫彊榪般俠ody 鐨勫彊榪版墽琛屽畬寰岋紝浼氬啀嫻嬭瘯 condition錛屽亣濡?br>condition 涓虹湡錛屽垯 body 浼氬啀搴﹁鎵ц銆傝繖涓繃紼嬩細涓鐩磋閲嶅鐩村埌
condition 涓嶅啀鏄湡銆傚鏋?condition 絎竴嬈℃祴璇曞氨鏄吉(false)錛屽垯
body 浠庢病鏈夎鎵ц銆?/p>

涓嬮潰鐨勪緥瀛愪細鍗板嚭姣忎釜杈撳叆璁板綍(record)鐨勫墠涓変釜鏍忎綅銆?/p>

gawk ‘{ i=1
while (i <= 3) {
print $i
i++
}
}'
7.3 do-while 鍙欒堪

do
body
while (condition)

榪欎釜 do loop 鎵ц body 涓嬈★紝鐒跺緦鍙 condition 鏄湡鍒欎細閲嶅鎵ц body銆?br>鍗充嬌寮濮嬫椂 condition 鏄吉錛宐ody 涔熶細琚墽琛屼竴嬈°?/p>

涓嬮潰鐨勪緥瀛愪細鍗板嚭姣忎釜杈撳叆璁板綍鍗佹銆?/p>

gawk '{ i= 1
do {
print $0
i++
} while (i <= 10)
}'
7.4 for 鍙欒堪

for (initialization; condition; increment)
body

姝ゅ彊榪板紑濮嬫椂浼氭墽琛宨nitialization錛岀劧寰屽彧瑕?condition鏄湡錛屽畠
浼氶噸澶嶆墽琛宐ody涓庡仛increment 銆?/p>

涓嬮潰鐨勪緥瀛愪細鍗板嚭姣忎釜杈撳叆璁板綍鐨勫墠涓変釜鏍忎綅銆?/p>

gawk '{ for (i=1; i<=3; i++)
print $i
}'
7.5 break 鍙欒堪

break 鍙欒堪浼氳煩鍑哄寘鍚畠鐨?for銆亀hile銆乨o-while 鍥炲湀鐨勬渶鍐呭眰銆?/p>

涓嬮潰鐨勪緥瀛愪細鎵懼嚭浠諱綍鏁存暟鐨勬渶灝忛櫎鏁幫紝瀹冧篃浼氬垽鏂槸鍚︿負璐ㄦ暟銆?/p>

gawk '# find smallest divisor of num
{ num=$1
for (div=2; div*div <=num; div++)
if (num % div == 0)
break
if (num % div == 0)
printf "Smallest divisor of %d is %d\n", num, div
else
printf "%d is prime\n", num }'
7.6 continue 鍙欒堪

continue 鍙欒堪浣跨敤鏂?for銆亀hile銆乨o-while 鍥炲湀鍐呴儴錛屽畠浼氳煩
榪囧洖鍦?body 鐨勫墿棣閮ㄥ垎錛屼嬌寰楀畠绔嬪埢榪涜涓嬩竴嬈″洖鍦堢殑鎵ц銆?/p>

涓嬮潰鐨勪緥瀛愪細鍗板嚭 0 鑷?20 鐨勫叏閮ㄦ暟瀛楋紝浣嗘槸 5 騫朵笉浼氳鍗板嚭銆?/p>

gawk 'BEGIN {
for (x=0; x<=20; x++) {
if (x==5)
continue
printf ("%d",x)
}
print ""
}'
7.7 next 鍙欒堪銆乶ext file 鍙欒堪銆乪xit 鍙欒堪

next 鍙欒堪寮鴻揩 gawk 绔嬪埢鍋滄澶勭悊鐩墠鐨勮褰?record)鑰岀戶緇笅涓
涓褰曘?/p>

next file 鍙欒堪綾諱技 next銆傜劧鑰岋紝瀹冨己榪?gawk 绔嬪埢鍋滄澶勭悊鐩墠
鐨勮祫鏂欐。銆?/p>

exit 鍙欒堪浼氫嬌寰?gawk 紼嬪紡鍋滄鎵ц鑰岃煩鍑恒傜劧鑰岋紝濡傛灉 END 鍑虹幇
錛屽畠浼氬幓鎵ц END 鐨?actions銆?br>絎叓绔?鍐呭緩鍑藉紡(Built-in Functions)

鍐呭緩鍑藉紡鏄?gawk 鍐呭緩鐨勫嚱寮忥紝鍙湪 gawk 紼嬪紡鐨勪換浣曞湴鏂瑰懠鍙唴寤?br>鍑藉紡銆?br>8.1 鏁板兼柟闈㈢殑鍐呭緩鍑藉紡

int(x) 姹傚嚭 x 鐨勬暣鏁伴儴浠斤紝鏈濆悜 0 鐨勬柟鍚戝仛鑸嶅幓銆備緥濡傦細int(3.9)
鏄?3錛宨nt(-3.9) 鏄?-3銆?br>sqrt(x) 姹傚嚭 x 姝g殑騫蟲柟鏍瑰箋備緥 sqrt(4)=2
exp(x) 姹傚嚭 x 鐨勬鏂廣備緥 exp(2) 鍗蟲槸姹?e*e 銆?br>log(x) 姹傚嚭 x 鐨勮嚜鐒跺鏁般?br>sin(x) 姹傚嚭 x 鐨?sine 鍊鹼紝x 鏄吉搴﹂噺銆?br>cos(x) 姹傚嚭 x 鐨?cosine 鍊鹼紝x 鏄吉搴﹂噺銆?br>atan2(y,x) 姹?y/x 鐨?arctangent 鍊鹼紝鎵姹傚嚭鐨勫煎叾鍗曚綅鏄吉搴﹂噺銆?br>rand() 寰楀嚭涓涓貢鏁板箋傛涔辨暟鍊煎鉤鍧囧垎甯冨湪 0 鍜?1 涔嬮棿銆傝繖涓?br>鍊間笉浼氭槸 0錛屼篃涓嶄細鏄?1銆?br>姣忔鎵ц gawk錛宺and 寮濮嬩駭鐢熸暟瀛椾粠鐩稿悓鐐規(guī)垨 seed銆?br>srand(x) 璁懼畾浜х敓涔辨暟鐨勫紑濮嬬偣鎴?seed 涓?x銆傚鏋滃湪絎簩嬈′綘璁?br>瀹氱浉鍚岀殑 seed 鍊鹼紝浣犲皢鍐嶅害寰楀埌鐩稿悓搴忓垪鐨勪貢鏁板箋?br>濡傛灉鐪佺暐寮曟暟 x錛屼緥濡?srand()錛屽垯鐜板湪鐨勬棩鏈熴佹椂闂翠細
琚綋鎴?seed銆傝繖涓柟娉曞彲浣垮緱涔辨暟鍊兼槸鐪熸涓嶅彲棰勬祴鐨勩?br>srand 鐨勪紶鍥炲?return value)鏄墠嬈℃墍璁懼畾鐨?seed 鍊箋?br>8.2 瀛椾覆鏂歸潰鐨勫唴寤哄嚱寮?/p>

index(in, find)
瀹冧細鍦ㄥ瓧涓?in 閲岄潰錛屽鎵懼瓧涓?find 絎竴嬈″嚭鐜扮殑鍦版柟錛屼紶鍥炲兼槸
瀛椾覆 find 鍑虹幇鍦ㄥ瓧涓?in 閲岄潰鐨勪綅緗傚鏋滃湪瀛椾覆 in 閲岄潰鎵句笉鍒板瓧
涓?find錛屽垯浼犲洖鍊間負 0銆?br>渚嬪錛?br>print index("peanut","an")
浼氬嵃鍑?3銆?/p>

length(string)
姹傚嚭 string 鏈夊嚑涓瓧鍏冦?br>渚嬪錛?br>length("abcde")
鏄?5銆?/p>

match(string,regexp)
match 鍑藉紡浼氬湪瀛椾覆 string 閲岄潰錛屽鎵劇鍚?regexp 鐨勬渶闀褲佹渶闈?br>宸﹁竟鐨勫瓙瀛椾覆銆備紶鍥炲兼槸 regexp 鍦?string 鐨勫紑濮嬩綅緗紝鍗?index
鍊箋?br>match 鍑藉紡浼氳瀹氬唴鍦ㄥ彉鏁?RSTART 絳夋柤 index錛屽畠涔熶細璁懼畾鍐呭湪鍙?br>鏁?RLENGTH 絳夋柤絎﹀悎鐨勫瓧鍏冧釜鏁般傚鏋滀笉絎﹀悎錛屽垯浼氳瀹?RSTART 涓?br>0銆丷LENGTH 涓?-1銆?/p>

sprintf(format,expression1,...)
涓?printf 綾諱技錛屼絾鏄?sprintf 騫朵笉鍗板嚭錛岃屾槸浼犲洖瀛椾覆銆?br>渚嬪錛?br>sprintf("pi = %.2f (approx.)',22/7)
浼犲洖鐨勫瓧涓蹭負"pi = 3.14 (approx.)"

sub(regexp, replacement,target)
鍦ㄥ瓧涓?target 閲岄潰錛屽鎵劇鍚?regexp 鐨勬渶闀褲佹渶闈犲乏杈圭殑鍦版柟錛?br>浠ュ瓧涓?replacement 浠f浛鏈宸﹁竟鐨?regexp銆?br>渚嬪錛?br>str = "water, water, everywhere"
sub(/at/, "ith",str)
緇撴灉瀛椾覆str浼氬彉鎴?br>"wither, water, everywhere"

gsub(regexp, replacement, target)
gsub 涓庡墠闈㈢殑 sub 綾諱技銆傚湪瀛椾覆 target 閲岄潰錛屽鎵劇鍚?regexp 鐨?br>鎵鏈夊湴鏂癸紝浠ュ瓧涓?replacement 浠f浛鎵鏈夌殑 regexp銆?br>渚嬪錛?br>str="water, water, everywhere"
gsub(/at/, "ith",str)
緇撴灉瀛椾覆str浼氬彉鎴?br>'wither, wither, everywhere"

substr(string, start, length)
浼犲洖瀛椾覆 string 鐨勫瓙瀛椾覆錛岃繖涓瓙瀛椾覆鐨勯暱搴︿負 length 涓瓧鍏冿紝
浠庣 start 涓綅緗紑濮嬨?br>渚嬪錛?br>substr("washington",5,3)
浼犲洖鍊間負"ing"
濡傛灉 length 娌℃湁鍑虹幇錛屽垯浼犲洖鐨勫瓙瀛椾覆鏄粠絎?start 涓綅緗紑濮?br>鑷崇粨鏉熴?br>渚嬪錛?br>substr("washington",5)
浼犲洖鍊間負"ington"

tolower(string)
灝嗗瓧涓瞫tring鐨勫ぇ鍐欏瓧姣嶆敼涓哄皬鍐欏瓧姣嶃?br>渚嬪錛?br>tolower("MiXeD cAsE 123")
浼犲洖鍊間負"mixed case 123"

toupper(string)
灝嗗瓧涓瞫tring鐨勫皬鍐欏瓧姣嶆敼涓哄ぇ鍐欏瓧姣嶃?br>渚嬪錛?br>toupper("MiXeD cAsE 123")
浼犲洖鍊間負"MIXED CASE 123"
8.3 杈撳叆杈撳嚭鐨勫唴寤哄嚱寮?/p>

close(filename)
灝嗚緭鍏ユ垨杈撳嚭鐨勬。妗?filename 鍏抽棴銆?/p>

system(command)
姝ゅ嚱寮忓厑璁鎬嬌鐢ㄨ呮墽琛屼綔涓氱郴緇熺殑鎸囦護錛屾墽琛屽畬姣曞緦灝嗗洖鍒?gawk
紼嬪紡銆?br>渚嬪錛?br>BEGIN {system("ls")}
絎節(jié)绔?浣跨敤鑰呭畾涔夌殑鍑藉紡(User-defined Functions)

澶嶆潅鐨?gawk 紼嬪紡甯稿父鍙互浣跨敤鑷繁瀹氫箟鐨勫嚱寮忔潵綆鍖栥傚懠鍙嬌鐢?br>鑰呭畾涔夌殑鍑藉紡涓庡懠鍙唴寤哄嚱寮忕殑鏂規(guī)硶涓鏍楓?br>9.1 鍑藉紡瀹氫箟鐨勬牸寮?/p>

鍑藉紡鐨勫畾涔夊彲浠ユ斁鍦?gawk 紼嬪紡鐨勪換浣曞湴鏂廣?/p>

涓涓嬌鐢ㄨ呭畾涔夌殑鍑藉紡鍏舵牸寮忓涓嬶細

function name (parameter-list) {
body-of-function
}

name 鏄墍瀹氫箟鐨勫嚱寮忎箣鍚嶇О銆備竴涓紜殑鍑藉紡鍚嶇О鍙寘鎷竴搴忓垪鐨勫瓧
姣嶃佹暟瀛椼佷笅鏍囩嚎 (underscores)錛屼絾鏄笉鍙敤鏁板瓧鍋氬紑澶淬?/p>

parameter-list 鏄垪鍑哄嚱寮忕殑鍏ㄩ儴寮曟暟(argument)錛屽悇涓紩鏁頒箣
闂翠互閫楃偣闅斿紑銆?/p>

body-of-function 鍖呭惈 gawk 鐨勫彊榪?(statement)銆傚畠鏄嚱寮忓畾涔?br>閲屾渶閲嶈鐨勯儴浠斤紝瀹冨喅瀹氬嚱寮忓疄闄呰鍋氫綍縐嶄簨銆?br>9.2 鍑藉紡瀹氫箟鐨勪緥瀛?/p>

涓嬮潰榪欎釜渚嬪瓙錛屼細灝嗘瘡涓褰曠殑絎竴涓爮浣嶄箣鍊肩殑騫蟲柟涓庣浜屼釜
鏍忎綅涔嬪肩殑騫蟲柟鍔犺搗鏉ャ?/p>

{print "sum =",SquareSum($1,$2)}
function SquareSum(x,y) {
sum=x*x+y*y
return sum
}
絎崄绔?鈻′緥

榪欓噷灝嗗垪鍑?gawk 紼嬪紡鐨勪竴浜涗緥瀛愩?/p>

gawk '{if (NF > max) max = NF}
END {print max}’
姝ょ▼寮忎細鍗板嚭鎵鏈夎緭鍏ヨ涔嬩腑錛屾爮浣嶇殑鏈澶т釜鏁般?/p>

gawk ‘length($0) > 80′
姝ょ▼寮忎細鍗板嚭涓琛岃秴榪?80 涓瓧鍏冪殑姣忎竴琛屻傛澶勫彧鏈?pattern 琚?br>鍒楀嚭錛宎ction 鏄噰鐢ㄥ唴瀹氱殑 print銆?/p>

gawk ‘NF > 0′
瀵規(guī)柤鎷ユ湁鑷沖皯涓涓爮浣嶇殑鎵鏈夎錛屾紼嬪紡鐨嗕細鍗板嚭銆傝繖鏄竴涓畝
鍗曠殑鏂規(guī)硶錛屽皢涓涓。妗堥噷鐨勬墍鏈夌┖鐧借鍒犻櫎銆?/p>

gawk ‘{if (NF > 0) print}’
瀵規(guī)柤鎷ユ湁鑷沖皯涓涓爮浣嶇殑鎵鏈夎錛屾紼嬪紡鐨嗕細鍗板嚭銆傝繖鏄竴涓畝
鍗曠殑鏂規(guī)硶錛屽皢涓涓。妗堥噷鐨勬墍鏈夌┖鐧借鍒犻櫎銆?/p>

gawk ‘BEGIN {for (i = 1; i <= 7; i++)
print int(101 * rand())}'
姝ょ▼寮忎細鍗板嚭鈻″洿鏄?0 鍒?100 涔嬮棿鐨?7 涓貢鏁板箋?/p>

ls -l files | gawk '{x += $4}; END {print "total bytes: " x}'
姝ょ▼寮忎細鍗板嚭鎵鏈夋寚瀹氱殑妗f涔媌ytes鏁扮洰鐨勬誨拰銆?/p>

expand file | gawk '{if (x < length()) x = length()}
END {print "maximum line length is " x}'
姝ょ▼寮忎細灝嗘寚瀹氭。妗堥噷鏈闀夸竴琛岀殑闀垮害鍗板嚭銆俥xpand 浼氬皢 tab 鏀?br>鎴?space錛屾墍浠ユ槸鐢ㄥ疄闄呯殑鍙寵竟鐣屾潵鍋氶暱搴︾殑姣旇緝銆?/p>

gawk 'BEGIN {FS = ":"}
{print $1 | "sort"}' /etc/passwd
姝ょ▼寮忎細灝嗘墍鏈変嬌鐢ㄨ呯殑login鍚嶇О錛屼緷鐓у瓧姣嶇殑欏哄簭鍗板嚭銆?/p>

gawk '{nlines++}
END {print nlines}'
姝ょ▼寮忎細灝嗕竴涓。妗堢殑鎬昏鏁板嵃鍑恒?/p>

gawk 'END {print NR}'
姝ょ▼寮忎篃浼氬皢涓涓。妗堢殑鎬昏鏁板嵃鍑猴紝浣嗘槸璁$畻琛屾暟鐨勫伐浣滅敱gawk
鏉ュ仛銆?/p>

gawk '{print NR,$0}'
姝ょ▼寮忓嵃鍑烘。妗堢殑鍐呭鏃訛紝浼氬湪姣忚鐨勬渶鍓嶉潰鍗板嚭琛屽彿錛屽畠鐨勫姛
鑳戒笌 'cat -n' 綾諱技銆?br>絎崄涓绔?緇撹

gawk 瀵規(guī)柤璧勬枡鐨勫鐞嗗叿鏈夊緢寮虹殑鍔熻兘銆傚畠鑳藉浠ュ緢鐭殑紼嬪紡瀹屾垚
鎯寵鍋氱殑浜嬶紝鐢氳嚦涓鎴栦簩琛岀殑紼嬪紡灝辮兘瀹屾垚鎸囧畾鐨勫伐浣溿傚悓鏍風殑涓浠?br>宸ヤ綔錛屼互 gawk 紼嬪紡鏉ュ啓浼氭瘮鐢ㄥ叾瀹冪▼寮忚璦鏉ュ啓鐭緢澶氥?/p>

gawk 鏄?GNU 鎵鍋氱殑 awk錛屽畠鏄叕浼楄蔣浣?Public Domain) 鍙厤璐逛嬌
鐢ㄣ?br>(http://www.fanqiang.com)

鍘熸枃閾炬帴錛?a >http://www.phpx.com/happy/top58375.html



megax 2008-03-11 14:06 鍙戣〃璇勮
]]>
[杞琞DB2 9 綆$悊涔嬫湇鍔″櫒綆$悊http://www.shnenglu.com/megax/articles/44174.htmlmegaxmegaxTue, 11 Mar 2008 06:04:00 GMThttp://www.shnenglu.com/megax/articles/44174.htmlhttp://www.shnenglu.com/megax/comments/44174.htmlhttp://www.shnenglu.com/megax/articles/44174.html#Feedback0http://www.shnenglu.com/megax/comments/commentRss/44174.htmlhttp://www.shnenglu.com/megax/services/trackbacks/44174.htmlDB2 瀹炰緥 鏄竴縐嶉昏緫涓婁笅鏂囷紝DB2 鍛戒護鍙婂嚱鏁板湪鍏朵腑鎵ц銆傛?zhèn)ㄥ彲灏嗗疄渚嬭湄摻帯鐞嗗?guī)暟鎹簱鏂囦歡鐨勮闂殑鏈嶅姟鎴栧畧鎶よ繘紼嬨傚湪涓鍙版湇鍔″櫒涓婂彲瀹氫箟澶氫釜瀹炰緥銆傚悇瀹炰緥鐙珛浜庡叾浠栧疄渚嬶紝涔熷氨鏄鎵鏈夊疄渚嬪潎鍙垎鍒鐞嗐佹搷綰靛強璋冧紭銆?/p>

銆銆涓銆丏B2 瀹炰緥 

 

銆銆1銆佸垱寤哄強鍒犻櫎瀹炰緥

銆銆DB2 瀹炰緥 鏄竴縐嶉昏緫涓婁笅鏂囷紝DB2 鍛戒護鍙婂嚱鏁板湪鍏朵腑鎵ц銆傛?zhèn)ㄥ彲灏嗗疄渚嬭湄摻帯鐞嗗?guī)暟鎹簱鏂囦歡鐨勮闂殑鏈嶅姟鎴栧畧鎶よ繘紼嬨傚湪涓鍙版湇鍔″櫒涓婂彲瀹氫箟澶氫釜瀹炰緥銆傚悇瀹炰緥鐙珛浜庡叾浠栧疄渚嬶紝涔熷氨鏄鎵鏈夊疄渚嬪潎鍙垎鍒鐞嗐佹搷綰靛強璋冧紭銆?/p>

銆銆瑕佸湪 Windows 涓垱寤哄疄渚嬶紝鍙渶鎵ц浠ヤ笅鍛戒護錛?/p>
db2icrt instance_name

銆銆鍦?Linux 鍜?UNIX 涓紝鎮(zhèn)ㄥ繀欏誨彟澶栨彁渚涗竴涓敤鎴?ID錛岀敤浠ュ垱寤?fenced 鐢ㄦ埛瀹氫箟鐨勫嚱鏁板拰瀛樺偍榪囩▼榪涚▼錛屽艦寮忓涓嬶細

db2icrt -u fenced_user_ID instance_name

銆銆榛樿鎯呭喌涓嬶紝鐢ㄦ埛瀹氫箟鐨勫嚱鏁板拰瀛樺偍榪囩▼鏄湪 fenced 妯″紡涓嬪垱寤虹殑錛屽洜鑰岃繖浜涜繘紼嬭繍琛屽湪涓?DB2 寮曟搸涓嶅悓鐨勫湴鍧絀洪棿涓紝涔熺О涓虹郴緇熸帶鍒跺櫒榪涚▼ db2sysc銆傝繖涓烘暟鎹簱綆$悊鍣ㄦ彁渚涗簡淇濇姢錛屼嬌涔嬪厤浜庤鐢ㄦ埛瀹氫箟鐨勪緥紼嬫剰澶栧湴鎴栨伓鎰忓湴鐮村潖銆?/p>

銆銆瑕佸垹闄や竴涓疄渚嬶紝棣栧厛鏂紑鎵鏈夋暟鎹簱榪炴帴錛岀劧鍚庢墽琛屼互涓嬪懡浠ゅ仠姝㈠疄渚嬶細

db2idrop -f instance_name

銆銆2銆佸垪涓俱佽縼縐誨拰鏇存柊 DB2 瀹炰緥

銆銆瑕佸垪涓炬湇鍔″櫒涓婂瓨鍦ㄧ殑 DB2 瀹炰緥錛屽彲浣跨敤浠ヤ笅鍛戒護錛?/p>
db2ilist

銆銆鑻ユ?zhèn)ㄥ啗_畾杞屼嬌鐢ㄦ瘮鏈嶅姟鍣ㄤ笂瀹夎鐨?DB2 杞歡鏇存柊鐨勭増鏈紝鎴栬呴渶瑕佸皢 32 浣嶅疄渚嬭縼縐諱負 64 浣嶅疄渚嬶紝灝遍渶瑕佽繘琛屽疄渚嬭縼縐匯傚湪Windows 涓婏紝瀹炰緥榪佺Щ鏄湪蹇呰鐨勮縼縐昏繃紼嬩腑闅愬紡瀹屾垚鐨勩傚湪 Linux 鍜?UNIX 涓婏紝鍙嬌鐢ㄤ互涓嬪懡浠ゆ樉寮忓湴榪佺Щ宸叉湁瀹炰緥錛?/p>
db2imigr instance_name

銆銆鍦ㄤ負 DB2 瀹夎淇ˉ紼嬪簭鍖呮垨琛ヤ竵鏃訛紝涓鏃﹀湪鏈嶅姟鍣ㄤ笂瀹夎濂戒簡淇ˉ紼嬪簭鍖咃紝鎮(zhèn)ㄥ氨闇瑕佹洿鏂板凡鏈夊疄渚嬶紝浠ラ摼鎺ュ埌鏂扮殑淇ˉ紼嬪簭鏂囦歡銆備嬌鐢ㄤ互涓嬪懡浠ゆ洿鏂板疄渚嬶細

db2iupdt instance_name

3銆佽緗?DB2 鐜銆銆鎭板綋鍦拌緗?DB2 鐜闈炲父閲嶈錛岃繖鏄洜涓哄畠鎺у埗鐫 DB2 鎿嶄綔鍜屾椿鍔ㄧ殑鏂瑰紡銆侱B2 鐜鐢變互涓嬪嚑閮ㄥ垎鏋勬垚錛?/p>

銆銆鈼?DB2 閰嶇疆鏂囦歡娉ㄥ唽搴?/p>

銆銆鈼?鎿嶄綔緋葷粺鐜鍙橀噺

銆銆鈼?DB2 鏁版嵁搴撶鐞嗗櫒閰嶇疆鍙傛暟

銆銆鈼?DB2 鏁版嵁搴撻厤緗弬鏁?/p>

銆銆4銆佽緗厤緗枃浠舵敞鍐屽簱

銆銆DB2 閰嶇疆鏂囦歡娉ㄥ唽搴撴槸鐗瑰畾浜?DB2 鐨勫彉閲忥紝瀹冧細褰卞搷 DB2 緋葷粺鐨勭鐞嗐侀厤緗笌鎬ц兘銆備負浣?DB2 閰嶇疆鏂囦歡娉ㄥ唽搴撶殑鏇存敼鐢熸晥錛屾?zhèn)ㄩ氬父闇瑕佸仠姝㈠茍閲嶅惎瀹炰緥銆?/p>

銆銆瑕佸垪涓炬墍鏀寔鐨勫叏閮?DB2 閰嶇疆鏂囦歡娉ㄥ唽搴擄細

db2set -lr

銆銆瑕佽緗?DB2 閰嶇疆鏂囦歡娉ㄥ唽搴擄細

db2set registry_variable = value

銆銆璇鋒敞鎰忥紝鍦ㄥ彉閲忓悕銆佺瓑鍙峰拰鍙橀噺鍊間箣闂存病鏈夌┖鏍箋備笅闈㈢粰鍑轟竴涓皢 DB2COMM 娉ㄥ唽搴撳彉閲忚緗負鍗曚竴鍊肩殑紺轟緥錛?/p>
db2set DB2COMM=TCPIP

銆銆灝?DB2COMM 娉ㄥ唽搴撳彉閲忚緗負澶氫釜鍊肩殑紺轟緥濡備笅錛?/p>
db2set DB2COMM=TCPIP,NPIPE,LOCAL

銆銆瑕佸皢 DB2 閰嶇疆鏂囦歡娉ㄥ唽搴撻噸緗負榛樿鍊鹼紝鍙渶浣跨敤涓庝笂闈㈢浉鍚岀殑鍛戒護鍗沖彲錛屼絾涓嶆寚瀹氫換浣曞鹼細

db2set registry_variable =

銆銆瑕佹樉紺烘湇鍔″櫒涓婂綋鍓嶈緗殑鎵鏈?DB2 閰嶇疆鏂囦歡娉ㄥ唽搴擄紝璇鋒墽琛屼互涓嬪懡浠わ細

db2set -all

5銆佽緗郴緇熺幆澧冨彉閲忋銆瑕佷簡瑙f?zhèn)ㄥ綋鍓嶅伐浣滃湪鍝?DB2 瀹炰緥涓紝鍙繍琛屼互涓?DB2 鍛戒護錛?/p>
db2 get instance

銆銆姝ゅ懡浠ょ殑杈撳嚭緇撴灉褰㈠紡濡備笅錛?/p>
The current database manager instance is: DB2

銆銆緇濆ぇ澶氭暟 DB2 鐜璁劇疆閮芥槸鐢?DB2 閰嶇疆鏂囦歡娉ㄥ唽搴撴帶鍒剁殑銆傝岄偅浜涙湭瀛樺偍鍦ㄩ厤緗枃浠舵敞鍐屽簱涓殑璁劇疆縐頒負鎿嶄綔緋葷粺鐜鍙橀噺銆傝緗郴緇熷彉閲忕殑鍛戒護灝嗘牴鎹?zhèn)ㄦ墍浣跨敤鐨勫鉤鍙板強 UNIX shell 鑰屾湁鎵涓嶅悓銆?/p>

銆銆鈼?鍦?Windows 涓細 set DB2INSTANCE=DB2

銆銆鈼?鍦?Linux 鍜?UNIX 鐨?Korn shell 涓細 export DB2INSTANCE=DB2

銆銆DB2INSTANCE 鏄竴涓渶瑕佹帉鎻$殑閲嶈緋葷粺鍙橀噺銆傚畠鎸囧畾褰撳墠搴旂敤紼嬪簭鐨勪細璇濇垨紿楀彛鐨勯粯璁?DB2 瀹炰緥銆備竴鏃﹁緗ソ璇ュ彉閲忥紝鍚庣畫鐨勬墍鏈?DB2 鍛戒護閮藉皢鍦ㄨ瀹炰緥鐨勪綔鐢ㄥ煙鍐呮墽琛屻?/p>

銆銆6銆佽緗厤緗弬鏁?/p>

銆銆鍦?DB2 涓紝瀛樺湪涓や釜閰嶇疆 “綰у埆”銆傚湪瀹炰緥(鎴栨暟鎹簱綆$悊鍣?綰у埆錛屾?zhèn)ㄥ彲湄撹瀹炰緥閰嵕|暣涓?DB2 鐜錛岃繖灝嗗獎鍝嶅疄渚嬩腑鐨勬墍鏈夋暟鎹簱鍜屼嬌鐢ㄨ瀹炰緥涓暟鎹簱鐨勬墍鏈夊簲鐢ㄧ▼搴忋傚湪鏁版嵁搴?綰у埆錛屾?zhèn)ㄥ彲閰嵕|弬鏁幫紝鑰岃繖浜涘弬鏁板皢褰卞搷鍒拌闂壒瀹氭暟鎹簱鐨勬墍鏈夊簲鐢ㄧ▼搴忕殑琛屼負銆?/p>

銆銆鑾峰彇 DBMS 鎴栬?DB 鐨勯厤緗弬鏁幫細

db2 get database manager configuration
db2 get database configuration for database_name

銆銆鎴栬?鍚庡悓)

db2 get database manager cfg
db2 get database cfg for database_name

銆銆鏇存敼 DBMS 鎴栬?DB 鐨勯厤緗弬鏁?/p>
db2 update database manager configuration using parameter new_value
db2 update database configuration for database_name using parameter new_value

7銆佽仈鏈鴻緗厤緗弬鏁般銆緇濆ぇ澶氭暟閰嶇疆鍙傛暟鍧囧彲鍦ㄥ疄渚嬫垨鏁版嵁搴撲繚鎸佽繍琛岀殑鎯呭喌涓嬭仈鏈鴻緗傚彧瑕佸彲鑳斤紝瀵硅繖浜涜仈鏈洪厤緗弬鏁扮殑鏇存敼榛樿涓虹珛鍗崇敓鏁堛備緥濡傦紝鑻ユ洿鏀逛簡 sortheap 鐨勫鹼紝鎵鏈夋柊鐨?SQL 璇鋒眰灝嗕嬌鐢ㄦ柊鍊箋備負鏄懼紡鎸囧畾榪欑绔嬪嵆鐢熸晥鐨勮涓猴紝鍙皢 immediate 鍏抽敭瀛楅檮鍔犲埌 update 鍛戒護涓細

db2 update database manager configuration using parameter new_value immediate
db2 update database configuration for database_name using parameter new_value immediate

銆銆鑻ユ?zhèn)ㄩ夋嫨灝嗘鏇存敼寤惰繜鑷沖疄渚嬮噸鍚垨鏁版嵁搴撴縺媧繪椂錛屽垯搴旀寚瀹?deferred 鍏抽敭瀛楋細

db2 update database manager configuration using parameter new_value deferred
db2 update database configuration for database_name using parameter new_value deferred

銆銆鏈夋椂錛屾?zhèn)ㄥ彲鑳藉笇鏈涙墤謬哄凡纭畾迤堝欢杩熶簡鍝簺鏇存攺V備負鏄劇ず鏁版嵁搴撶鐞嗗櫒閰嶇疆鍙傛暟鐨勫綋鍓嶅煎拰鎸傝搗鍊鹼紝棣栧厛榪涘叆瀹炰緥錛岀劧鍚庡湪 get database manager configuration 鍛戒護涓寚瀹?show detail 閫夐」錛屾柟娉曞涓?璇鋒敞鎰忥紝instance_name 鏄郴緇熺幆澧冨彉閲?DB2INSTANCE 璁劇疆鐨勫?錛?/p>
db2 attach to instance_name
db2 get database manager configuration show detail

銆銆鍚屾牱鍦幫紝瑕佸垪涓炬暟鎹簱閰嶇疆鍙傛暟鐨勫綋鍓嶅煎拰鎸傝搗鍊鹼紝棣栧厛榪炴帴鍒版暟鎹簱錛岀劧鍚庝嬌鐢?show detail 閫夐」錛?/p>
db2 connect to database_name
db2 get database configuration for database_name show detail

銆銆8銆佸己鍒跺仠姝㈠疄渚嬪拰鏁版嵁搴?/p>

銆銆濡傛灉鎮(zhèn)ㄩ渶瑕佷嬌鏁版嵁搴撴垨鏁版嵁搴撶鐞嗗櫒閰嶇疆鏇存敼绔嬪嵆鐢熸晥錛岃屾?zhèn)ㄦ墍鏇存敼鐨勫弬鏁板茍闈炲姩鎬侊紝閭d箞灝遍渶瑕佸仠姝㈠茍閲嶅惎鏁版嵁搴撴垨鏁翠釜瀹炰緥銆傝嫢瀛樺湪榪炴帴騫朵嬌鐢ㄦ瀹炰緥涓竴涓垨澶氫釜鏁版嵁搴撶殑搴旂敤紼嬪簭錛屾?zhèn)鏃犳硶鍋滄迤堥噸鍚暟鎹簱鎴栧疄渚嬨傛鏃訛紝鎮(zhèn)ㄥ彲浣跨敤濡備笅 DB2 鍛戒護錛屽己琛屼嬌鐢ㄦ埛鏂紑 涓庢暟鎹簱鐨勮繛鎺ワ細

db2 force application all

銆銆鎮(zhèn)ㄤ篃鍙互鍦ㄥ仠姝㈠疄渚嬬殑鍚屾椂鏂紑鎵鏈夌敤鎴風殑榪炴帴錛屽懡浠ゅ涓嬶細

db2stop force

銆銆鑻ユ?zhèn)ㄥ彧甯屾湜寮哄埗鍋滄涓涓壒瀹氱殑搴旂敤紼嬪簭錛屽垯闇瑕佷簡瑙h搴旂敤紼嬪簭鐨勫彞鏌勩?浣跨敤浠ヤ笅鍛戒護鏌ユ壘鍙ユ焺錛?/p>
db2 list applications

銆銆寮哄埗鍋滄璇ュ簲鐢ㄧ▼搴忕殑榪炴帴錛屽彲浣跨敤濡備笅 DB2 鍛戒護錛?x 涓鴻搴旂敤紼嬪簭鍙ユ焺)

db2 force application (x)

浜屻丏B2 瀹㈡埛鏈?鏈嶅姟鍣ㄨ繛閫氭?/strong>銆銆1銆丏B2 瀹㈡埛鏈?鏈嶅姟鍣ㄧ幆澧?/p>

銆銆鐢變簬 DB2 鐢ㄦ埛闂存暣浣撻氫俊鍗忚浣跨敤鎯呭喌鍙戠敓浜嗗彉鍖栵紝鍥犳涓哄疄鐜?DB2 瀹㈡埛鏈?鏈嶅姟鍣ㄨ繛閫氭э紝

銆銆DB2 鐩墠鏀寔浠ヤ笅鍗忚錛?/p>

銆銆鈼?TCP/IP

銆銆鈼?NPIPE

銆銆瀵逛簬鍒頒富鏁版嵁搴?濡?DB2 for z/OS 鍜?鎴?DB2 for iSeries)鐨勮繛鎺ワ紝蹇呴』鍏峰浣跨敤 Distributed Relational Database Architecture(DRDA)鐨?DB2 Connect銆?/p>

銆銆2銆佷負榪滅▼搴旂敤紼嬪簭榪炴帴鍑嗗鎮(zhèn)ㄧ殑 DB2 鏁版嵁搴?/p>

銆銆鍦?DB2 瀹㈡埛鏈?搴旂敤紼嬪簭)鑳藉榪炴帴鍒版暟鎹簱涔嬪墠錛屾?zhèn)ㄥ繀椤患嫯淇濇湇鍔″櫒绔氫俊寰楀埌浜嗘伆褰撶殑璁劇疆錛屽彲鎺ユ敹榪炴帴璇鋒眰銆傝涓?TCP/IP 榪炴帴鍑嗗鏈嶅姟鍣紝鎮(zhèn)ㄩ渶瑕佽緗竴涓?TCP/IP 鐩戝惉鍣紝鏂規(guī)硶濡備笅銆?/p>

銆銆(1)銆?浣跨敤浠ヤ笅鍛戒護璁劇疆 DB2 閰嶇疆鏂囦歡娉ㄥ唽搴?DB2COMM錛屼嬌瀹炰緥鑳藉鐩戝惉 TCP/IP 鐨勮繛鎺ワ細

db2set DB2COMM=TCPIP

銆銆(2)銆佷嬌鐢ㄦ紜殑绔彛鍙鋒洿鏂版暟鎹簱綆$悊鍣ㄩ厤緗弬鏁?svcename錛屽涓嬫墍紺猴細

db2 update database manager configuration using svcename 50000

銆銆(3)銆佹暟鎹簱綆$悊鍣ㄩ厤緗弬鏁?svcename 騫墮潪鍔ㄦ侊紝鍥犳鎮(zhèn)ㄥ繀欏誨仠姝㈠茍閲嶅惎瀹炰緥錛屼互浣?TCP/IP 鐩戝惉鍣ㄥ惎鍔紝濡備笅鎵紺猴細

db2stop
db2start

銆銆3銆佷嬌鐢?DB2 Configuration Assistant

銆銆DB2 Configuration Assistant 鎻愪緵浜嗙敤鎴峰弸濂界殑鍚戝鍜屽浘褰㈠寲鐣岄潰錛屽彲閰嶇疆鎮(zhèn)ㄦ垨鎮(zhèn)ㄧ殑搴旂敤紼嬪簭灝嗕嬌鐢ㄧ殑鐜銆傞氳繃 Configuration Assistant錛屾?zhèn)ㄥ彲浠ュQ?/p>

銆銆鈼?娣誨姞涓涓柊鐨勬暟鎹簱榪炴帴

銆銆鈼?鏇存柊鏁版嵁搴撹繛閫氭т俊鎭?/p>

銆銆鈼?鏌ョ湅騫舵洿鏂版暟鎹簱綆$悊鍣ㄩ厤緗弬鏁?/p>

銆銆鈼?鏌ョ湅騫舵洿鏂?DB2 閰嶇疆鏂囦歡娉ㄥ唽搴?/p>

銆銆鈼?灝嗗簲鐢ㄧ▼搴忕粦瀹氬埌鏁版嵁搴?/p>

銆銆鈼?鏇存柊 Call Level Interface(CLI)璁劇疆

銆4銆侀厤緗暟鎹簱榪為氭х殑涓夌鏂規(guī)硶

銆銆鍦?DB2 Configuration Assistant 涓紝鏈変笁涓夐」鍙敤浜庤緗暟鎹簱榪炴帴銆傛?zhèn)ㄥ彲浠ュQ?/p>

銆銆鈼?涓?DB2 鏁版嵁搴撴悳绱㈢綉緇?/p>

銆銆鈼?浣跨敤 DB2 璁塊棶閰嶇疆鏂囦歡

銆銆鈼?鎵嬪姩閰嶇疆榪炴帴

銆銆5銆侀氳繃鎼滅儲緗戠粶鑷姩閰嶇疆鏁版嵁搴撹繛閫氭?/p>

銆銆DB2 Discovery 鎼滅儲騫跺畾浣嶆?zhèn)ㄧ殑缃懢l滀笂鐨?DB2 鏈嶅姟鍣紝鎮(zhèn)ㄥ彲浠ラ夋嫨浣跨敤鎼滅儲 鎴栧凡鐭?鍙戠幇鏂規(guī)硶銆?/p>

銆銆鎼滅儲鏂規(guī)硶灝嗗湪緗戠粶涓悳绱換鎰?DB2 鏈嶅姟鍣ㄣ傝繖縐嶆柟娉曢渶瑕佽姳涓婁竴浜涙椂闂存墠鑳借繑鍥炵粨鏋溿?/p>

銆銆濡傛灉鎮(zhèn)ㄧ煡閬撲竴浜涘叧浜庡笇鏈涘畾浣嶇殑 DB2 鏈嶅姟鍣ㄧ殑淇℃伅錛屽垯鍙嬌鐢ㄥ凡鐭ユ柟娉曪紝騫舵彁渚涙暟鎹簱鎴栨湇鍔″櫒鍚嶇О涔嬬被鐨勪俊鎭潵綰︽潫鎼滅儲銆?/p>

銆銆DB2 鍏佽鏌愪簺 DB2 鏈嶅姟鍣ㄣ佸疄渚嬫垨鏁版嵁搴撳彲浠ヨ鍙戠幇鎴栬呬笉琚彂鐜般?/p>

銆銆浠呭湪 DB2 鏈嶅姟鍣ㄤ笂榪愯 Administration Server(DAS)鏈嶅姟銆佷笖 discover 閰嶇疆鍙傛暟琚緗負 search 鏃訛紝璇?DB2 鏈嶅姟鍣ㄦ墠鍙鎼滅儲鍒幫紝濡備笅鎵紺猴細

db2admin start
db2 update admin configuration using discover search

銆銆鎮(zhèn)ㄨ繕鍙帶鍒跺摢浜涘疄渚嬫槸鍙鍙戠幇鐨勶紝鍙渶璁劇疆 discover_inst 鏁版嵁搴撶鐞嗗櫒閰嶇疆鍙傛暟鍗沖彲錛屽涓嬫墍紺猴細

db2 update database manager configuration using discover_inst enable

銆銆鍚勬暟鎹簱閮芥嫢鏈変竴涓浉浼肩殑閰嶇疆鍙傛暟 鈥斺?discover_db錛屽畠鍙惎鐢ㄦ垨紱佺敤鏁版嵁搴撳彂鐜幫紝濡備笅鎵紺猴細

db2 update database configuration for database_name using discover_db enable

銆銆榪欓噷瑕侀噸鐐規(guī)寚鍑猴紝鍦?DAS銆佸疄渚嬫垨鏁版嵁搴撶駭鍒鐢ㄥ彂鐜頒笉浼氶檺鍒?DB2 瀹㈡埛鏈洪氳繃鍏朵粬鏂規(guī)硶璁劇疆鏁版嵁搴撹繛閫氭?涓嬫枃灝嗚緇嗚璁?銆侱B2 瀹㈡埛鏈轟粛鐒跺彲浠ヨ繛鎺ュ埌榪滅▼鏁版嵁搴?鈥斺?鍗充究鍏舵暟鎹簱閰嶇疆 discover_db 琚鐢ㄤ篃鏄姝ゃ?/p>

銆6銆佷嬌鐢?DB2 璁塊棶閰嶇疆鏂囦歡鑷姩閰嶇疆鏁版嵁搴撹繛閫氭?/p>

銆銆濡傛灉鎮(zhèn)ㄨ涓?1,000 鍙版垨鏇村鐨勫伐浣滅珯璁劇疆 DB2 瀹㈡埛鏈?鏈嶅姟鍣ㄨ繛閫氭э紝閭d箞鎮(zhèn)ㄤ細鎬庝箞鍋?鎮(zhèn)ㄥ綋鐒跺彲浠ュ墠寰姣忎竴鍙板伐浣滅珯錛屼嬌鐢–onfiguration Assistant 涓殑鍙戠幇鏂規(guī)硶錛屼絾鍙兘瑕佽姳涓婂緢闀夸竴孌墊椂闂存墠鑳藉畬鎴愯繖涓換鍔°傚湪姝ょ被鎯呭喌涓嬶紝鎮(zhèn)ㄥ簲鑰冭檻浣跨敤 DB2 璁塊棶閰嶇疆鏂囦歡銆?/p>

銆銆璁塊棶閰嶇疆鏂囦歡涓寘鍚鎴鋒満閰嶇疆涓?DB2 鏈嶅姟鍣ㄧ殑榪為氭ф椂鎵蹇呴渶鐨勪俊鎭傝闂厤緗枃浠舵湁涓ょ綾誨瀷錛?/p>

銆銆鈼?鏈嶅姟鍣ㄨ闂厤緗枃浠?鏄湪 DB2 鏈嶅姟鍣ㄤ笂鐢熸垚鐨勩傚畠鍖呭惈鏈嶅姟鍣ㄤ笂瀹氫箟鐨勫叏閮ㄦ垨閫夊畾鐨勯儴鍒嗗疄渚嬪拰鏁版嵁搴撶殑鐩稿叧淇℃伅銆?/p>

銆銆鈼?瀹㈡埛鏈洪厤緗枃浠?鏄湪 DB2 瀹㈡埛鏈轟笂鐢熸垚鐨勩傚畠鍖呭惈瀹㈡埛鏈轟笂宸茬紪鐩殑瀹炰緥(涔熺О涓鴻妭鐐?鍜屾暟鎹簱鐨勭浉鍏充俊鎭?/p>

銆銆璁╂垜浠愭鍦扮湅涓涓?DB2 璁塊棶閰嶇疆鏂囦歡鏂規(guī)硶銆?/p>

銆銆(1)銆佷嬌鐢?Configuration Assistant 灝嗕俊鎭鍑哄埌璁塊棶閰嶇疆鏂囦歡(璇ユ枃浠跺氨鏄竴涓?ASCII 鏂囦歡)銆?/p>

銆銆(2)銆佸皢瀵煎嚭鐨勬枃浠跺彂閫佺粰瀹㈡埛鏈恒?/p>

銆銆(3)銆佸湪瀹㈡埛鏈轟笂浣跨敤 Configuration Assistant 灝嗘枃浠跺鍏?DB2 瀹㈡埛鏈恒?/p>

銆銆絎笁涓楠や篃鍙互浣跨敤鍛戒護瀹炵幇錛?/p>
db2cfimp access_profile_name

銆銆7銆佹墜鍔ㄩ厤緗暟鎹簱榪為氭?/p>

銆銆濡傛灉鎮(zhèn)ㄤ簡瑙i厤緗繛閫氭ф墍蹇呴渶鐨勬墍鏈変俊鎭紝閭d箞鍙互浣跨敤 Configuration Assistant 涓殑 Add Database 鍚戝銆?/p>

銆銆(1)銆佸繀欏婚鍏堢紪鐩妭鐐?鎴?DB2 鏈嶅姟鍣?涓庡疄渚嬬殑緇撳悎銆?/p>
db2 catalog tcpip node mynode remote db2server.mycompany.com server db2icdb
db2 catalog netbios node jeremy remote N01FCBE3 adapter 0

銆銆(2)銆佺紪鐩暟鎹簱

db2 catalog database sample as mysamp at node mynode
db2 catalog database baydb as newbaydb at node mynode

銆8銆佸垪涓捐妭鐐瑰拰鏁版嵁搴撶洰褰曘銆瑕佸湪 node 鐩綍涓垪涓炬湇鍔″櫒涓庡疄渚嬬殑緇撳悎錛屽彲浣跨敤濡備笅鍛戒護錛?/p>
db2 list node directory

銆銆瑕佸垪涓?database 鐩綍錛屽彲浣跨敤濡備笅鍛戒護錛?/p>
db2 list database directory

銆銆9銆侀檮鍔犲埌瀹炰緥騫惰繛鎺ュ埌鏁版嵁搴?/p>

銆銆閫氳繃緙栫洰鑺傜偣鍜屾暟鎹簱璁劇疆瀹屽鎴鋒満/鏈嶅姟鍣ㄨ繛閫氭у悗錛屾?zhèn)ㄥ彲闄勫姞鍒板疄渚嬩互杩涜瀹炰緥珩斀帯鐞嗕徽d姟錛屼篃鍙繛鎺ュ埌鏁版嵁搴撲互璇誨彇璇ユ暟鎹簱涓殑鏁版嵁鎴栧悜鏁版嵁搴撳啓鍏ユ暟鎹?/p>

銆銆瑕侀檮鍔犲埌 DB2 瀹炰緥錛屽彲浣跨敤 DB2 鍛戒護 attach錛屽涓嬫墍紺猴細

attach to nodename user username using password

銆銆闄勫姞鍒板疄渚嬪悗錛屾?zhèn)ㄥ彲鍦ㄨ瀹炰緥涓婃墽琛尳帯鐞嗕徽d姟錛屼緥濡傦細

銆銆鈼?鍒涘緩鍜屽垹闄ゆ暟鎹簱

銆銆鈼?媯绱€佹洿鏂板拰閲嶇疆鏁版嵁搴撶鐞嗗櫒鍙婃暟鎹簱閰嶇疆鍙傛暟

銆銆鈼?綆$悊鏁版嵁搴撶洃鎺х▼搴?/p>

銆銆鈼?澶囦喚銆佽繕鍘熷拰鍓嶆粴鏁版嵁搴?/p>

銆銆鈼?寮哄埗鐢ㄦ埛鍜屽簲鐢ㄧ▼搴忎笌瀹炰緥涓畾涔夌殑鏁版嵁搴撴柇寮榪炴帴

銆銆瑕佽繛鎺ュ埌鏁版嵁搴擄紝浠ラ夋嫨銆佹彃鍏ャ佹洿鏂版垨鍒犻櫎鏁版嵁錛屾?zhèn)ㄥ繀椤婚鍏堥氳繃浠ヤ笅鏂瑰紡榪炴帴鍒版暟鎹簱錛?/p>
connect to database_name user username using password
[new new_password confirm new_password ]

銆銆榪炴帴鍒版暟鎹簱涔嬪悗錛屽氨鍙互榪涜鏁版嵁搴撶殑鐩稿簲鎿嶄綔浜嗐?/p>



megax 2008-03-11 14:04 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              一区二区三区日韩精品| 亚洲精品综合在线| 久久久噜噜噜久噜久久| 欧美在线视频观看免费网站| 国产农村妇女毛片精品久久麻豆 | 美女尤物久久精品| 亚洲第一精品电影| 亚洲人成人一区二区三区| 欧美电影免费| 亚洲欧美区自拍先锋| 午夜精品婷婷| 亚洲精品一区二区三区蜜桃久| 91久久综合亚洲鲁鲁五月天| 欧美视频一区二区在线观看| 久久成人在线| 免费永久网站黄欧美| 亚洲一品av免费观看| 香蕉成人久久| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩天堂在线视频| 国产一区日韩二区欧美三区| 亚洲高清资源综合久久精品| 国产精品一区二区在线观看不卡| 狂野欧美性猛交xxxx巴西| 亚洲成人在线视频播放 | 蜜桃久久精品乱码一区二区| 欧美不卡三区| 久久超碰97中文字幕| 美国十次成人| 久久精品国产77777蜜臀| 欧美大片在线看| 久久久精品国产一区二区三区| 欧美成人综合网站| 欧美影院在线| 欧美日韩精品一区二区| 久久综合伊人| 国产精品视频一二| 亚洲三级免费电影| 欲香欲色天天天综合和网| 一本久久a久久免费精品不卡| 在线播放日韩| 欧美在线不卡视频| 欧美一区国产在线| 欧美日韩在线大尺度| 欧美国产综合视频| 在线看视频不卡| 欧美一区二区三区在线播放| 亚洲欧美日韩综合aⅴ视频| 免费av成人在线| 久久一区二区精品| 国产欧美日韩一级| 亚洲欧美日本国产有色| 中国成人在线视频| 欧美日韩成人一区二区| 亚洲国产精品成人一区二区| 伊人春色精品| 久久久久久**毛片大全| 久久久91精品国产| 国产日韩在线看片| 欧美一区二区免费视频| 香蕉成人伊视频在线观看 | 久久精品视频在线看| 欧美在线一区二区三区| 国产精品欧美日韩一区| 亚洲一区二区三区精品动漫| 亚洲视频欧洲视频| 国产精品爱啪在线线免费观看| 亚洲久久一区二区| 亚洲性色视频| 国产精品国产亚洲精品看不卡15| 99精品热6080yy久久| 亚洲无吗在线| 国产精品久久久久久久免费软件| 亚洲无线视频| 久久九九精品| 亚洲人成网站精品片在线观看| 免费日韩av电影| 亚洲精品欧美在线| 亚洲一区二三| 国产一区二区三区在线观看视频| 久久精品观看| 亚洲国产精品一区| 亚洲一区二区在线观看视频| 国产精品资源| 久久久亚洲人| 日韩午夜电影| 国模私拍视频一区| 噜噜噜在线观看免费视频日韩| 亚洲国产精品第一区二区三区| 中日韩男男gay无套| 国产精品自拍在线| 猛男gaygay欧美视频| 99在线精品观看| 久久躁狠狠躁夜夜爽| 亚洲免费观看高清完整版在线观看熊 | 久久精品视频网| 91久久精品国产91久久| 欧美深夜影院| 久久精品一区蜜桃臀影院| 亚洲国产一区二区a毛片| 亚洲欧美日韩国产精品| 狠狠做深爱婷婷久久综合一区 | 欧美亚洲午夜视频在线观看| 亚洲国产成人高清精品| 欧美一区二区三区视频在线| 亚洲国产天堂久久综合网| 国产精品成人免费精品自在线观看| 欧美一区二区三区另类 | 模特精品裸拍一区| 香蕉精品999视频一区二区 | 在线观看视频免费一区二区三区| 欧美日韩免费观看一区| 久久久久一区二区| 亚洲性感激情| 亚洲精品婷婷| 欧美激情在线免费观看| 欧美在线电影| 亚洲综合电影| 在线不卡视频| 欧美日韩中文字幕日韩欧美| 麻豆精品视频| 欧美在线视频免费| 亚洲一区二区黄色| 亚洲精品亚洲人成人网| 欧美成人dvd在线视频| 久久久久一区二区| 欧美一区亚洲| 亚洲欧美经典视频| 最新成人在线| 亚洲国产欧美精品| 在线观看国产精品淫| 国产一区二区三区久久久久久久久| 欧美四级伦理在线| 欧美日韩中国免费专区在线看| 农村妇女精品| 欧美ab在线视频| 久久香蕉国产线看观看av| 久久精品国产一区二区三| 香港成人在线视频| 欧美一区二区三区久久精品茉莉花| 亚洲在线观看视频网站| 亚洲男人的天堂在线| 欧美一区二区三区免费在线看| 亚洲国产精品va在线观看黑人| 亚洲图片欧洲图片av| 日韩一本二本av| 亚洲精品国产视频| 亚洲日本欧美| 日韩午夜av| 亚洲综合色噜噜狠狠| 亚洲欧美国内爽妇网| 亚洲欧美精品suv| 香蕉免费一区二区三区在线观看 | 亚洲高清一二三区| 亚洲黄网站黄| 日韩午夜黄色| 宅男噜噜噜66一区二区| 国产精品99久久久久久久久久久久 | 欧美视频精品在线| 国产精品免费福利| 国产亚洲欧美日韩日本| 在线精品在线| 亚洲美女淫视频| 亚洲欧美国产精品专区久久| 欧美亚洲三级| 牛牛影视久久网| 99视频超级精品| 亚洲欧美日韩高清| 欧美一区二区在线免费播放| 一区二区免费看| 欧美在线观看日本一区| 女主播福利一区| 欧美三级日本三级少妇99| 国产精品一级二级三级| 亚洲国产成人久久| 亚洲一级在线观看| 免费不卡中文字幕视频| 亚洲美女电影在线| 欧美一二三视频| 欧美激情在线| 国产精品一区三区| 亚洲精品国产精品久久清纯直播| 亚洲一区激情| 亚洲福利视频网站| 亚洲欧美精品在线| 欧美日韩岛国| 在线日韩成人| 欧美中文字幕视频| 亚洲日本va午夜在线影院| 欧美在线观看一区| 欧美日韩在线观看视频| 在线欧美一区| 久久久成人精品| 日韩视频在线一区| 玖玖精品视频| 国产午夜精品全部视频播放| 一区二区免费在线播放| 你懂的国产精品| 先锋影音网一区二区| 欧美午夜美女看片|