锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鏂規(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);
}
浜屻佸湪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
鏇存敼 WSAD 瀹夎鐩綍涓?wsappdev.ini 鍦ㄨ VMArgs=-Xj9 鍚庡姞鍏ワ紝涓虹┖鍒欎笌鎿嶄綔緋葷粺榛樿璇█鐩稿悓銆?br>VMArgs=-Xj9 -Duser.language=en -Duser.region=US
鍏朵粬璇█鍙傛暟錛?br>-Duser.language=en -Duser.region=US 銆愯嫳鏂囥?br>-Duser.language=zh -Duser.region=CN 銆愪腑鏂囩畝浣撱?br>-Duser.language=zh -Duser.region=TW 銆愪腑鏂囩箒浣撱?br>
鍦ㄩ粯璁ゆ儏鍐典笅錛學ebSphere Application Developer 5鍦ㄥ惎鍔ㄧ殑鏃跺欎細寮瑰嚭涓涓彁紺虹獥鍙h鐢ㄦ埛閫夋嫨 workspace銆傚鏋滐紝鐢ㄦ埛閫変腑浜嗙獥鍙d笅鏂圭殑“灝嗘宸ヤ綔絀洪棿鐢ㄤ綔緙虹渷鍊煎茍涓斾笉鍐嶆樉紺烘瀵硅瘽妗?#8221;錛岄偅涔堜笅涓嬈″鎴峰啀榪愯WSAD鐨勬椂鍊欏皢涓嶄細寮瑰嚭鎻愮ず紿楀彛璁╃敤鎴烽夋嫨宸ヤ綔鍖恒傚鏋滐紝鐢ㄦ埛鍐嶆兂鏇存崲宸ヤ綔鍖哄皢鏃犳硶榪涜銆傚湪 Eclipse 3.1 涓紝File 鑿滃崟涓嬫湁 Switch Workspace 鐨勯夐」錛屼絾鏄?WSAD 5 鏄熀浜?Eclipse 2.x 鐨勶紝鎴戝皾璇曚簡寰堜箙閮芥病鏈夋壘鍒板湪閫夐」涓洿鏀?workspace 鐨勫湴鏂廣備箣鍚庡湪緗戜笂媯绱紝鏌ュ埌榪欎釜闂鏈夊涓嬭В鍐蟲柟妗堬細 1. 鎵撳紑鍛戒護琛岀獥鍙o紝榪涘叆wsappdev.exe鎵鍦ㄧ殑鐩綍(wsappdev.exe搴旇鍦╓SAD鐨勫畨瑁呰礬寰勪笅) 2. 鎵ц鍛戒護錛歸sappdev.exe -data 鏂規(guī)硶浜岋細鐢ㄥ懡浠よ鏂瑰紡鍚姩騫跺脊鍑烘彁紺虹獥鍙h鐢ㄦ埛閫夋嫨宸ヤ綔鍖?/p>
1. 鎵撳紑鍛戒護琛岀獥鍙o紝榪涘叆wsappdev.exe鎵鍦ㄧ殑鐩綍 2. 鎵ц鍛戒護錛歸sappdev.exe -setworkspace 鏂規(guī)硶涓夛細閫氳繃鏇存敼閰嶇疆鏂囦歡璁¦SAD鍚姩鐨勬椂鍊欏脊鍑轟竴涓彁紺虹獥鍙h鐢ㄦ埛閫夋嫨宸ヤ綔鍖?/p>
1. 鐢ㄦ枃鏈紪杈戝櫒鎵撳紑wsappdev.ini鏂囦歡(wsappdev.ini鏂囦歡鍜寃sappdev.exe鏂囦歡鍦ㄧ浉鍚岀殑璺緞涓?,榛樿鎯呭喌涓嬪彲浠ョ湅鍒扮被浼煎涓嬬殑鍐呭錛?/p>
[Settings] DefaultWorkspace= ProductName=IBM WebSphere Studio Application Developer Version=5.1.1 Full=Yes KeyName=wsappdev510 VMArgs=-Xj9 LUMProductID=1 LUMProductVersion=5.1.1 Website=www.ibm.com/websphere/developer/zones/studio/appdev/ [Environment Variables] 2. 鍦?[Environment Variables] 鐨勪笂鏂規(guī)坊鍔犱竴琛?SetWorkSpace=true 錛屼繚瀛?wsappdev.ini 鏂囦歡銆?/p>
3. 鍏抽棴 wsappdev.ini 鏂囦歡錛岄氳繃鑿滃崟鎴栬呯洿鎺ュ弻鍑?wsappdev.exe 鏂囦歡鍐嶆鍚姩 WSAD 鐨勬椂鍊欙紝灝變細寮瑰嚭涓涓彁紺虹獥鍙h鐢ㄦ埛閫夋嫨宸ヤ綔鍖恒?/p>
鈼嬪湪 eclipse 鐨勫揩鎹鋒柟寮忓悗闈㈠姞涓涓?鍙傛暟:-nl “zh_US”,灝卞彲浠ユ壘鍥炶嫳鏂囩殑鐣岄潰錛屽姞鍙傛暟錛?nl “zh_CN” 錛屽氨鍙互鐢ㄥ埌涓枃鐣岄潰
鏂規(guī)硶涓錛氱敤鍛戒護琛屾柟寮忓惎鍔ㄥ茍鎸囧畾鎵鐢ㄧ殑宸ヤ綔鍖?/p>
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騫?鏈?鏃ヤ互鏉ョ粡榪囩殑鏃墮棿錛堟寜縐掕綆楋級
榪欑粍鍛戒護鍦ㄦ悳绱笌瀹氫綅鏂囦歡涓壒瀹氱殑涓婚鏂歸潰闈炲父鏈夌敤銆傝鎼滅儲鐨勬ā寮忓彲浠ヨ璁や負鏄竴浜涘叧閿瘝錛屾?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
]]>
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錛屽鏋滀簩鑰呯殕鏄暟瀛楀垯瑙嗕負鏁板瓧涔嬮棿鐨勬瘮杈冿紝
鍚﹀垯瀹冧滑浼氳杞崲鎴愬瓧涓蹭笖浠ュ瓧涓茬殑褰㈠紡鍋氭瘮杈冦備袱涓瓧涓茬殑姣旇緝錛?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
姣旇緝鐨勭粨鏋滀負鐪?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
銆銆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 鐨勮繛鎺ワ細 銆銆(2)銆佷嬌鐢ㄦ紜殑绔彛鍙鋒洿鏂版暟鎹簱綆$悊鍣ㄩ厤緗弬鏁?svcename錛屽涓嬫墍紺猴細 銆銆(3)銆佹暟鎹簱綆$悊鍣ㄩ厤緗弬鏁?svcename 騫墮潪鍔ㄦ侊紝鍥犳鎮(zhèn)ㄥ繀欏誨仠姝㈠茍閲嶅惎瀹炰緥錛屼互浣?TCP/IP 鐩戝惉鍣ㄥ惎鍔紝濡備笅鎵紺猴細 銆銆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 鏈嶅姟鍣ㄦ墠鍙鎼滅儲鍒幫紝濡備笅鎵紺猴細 銆銆鎮(zhèn)ㄨ繕鍙帶鍒跺摢浜涘疄渚嬫槸鍙鍙戠幇鐨勶紝鍙渶璁劇疆 discover_inst 鏁版嵁搴撶鐞嗗櫒閰嶇疆鍙傛暟鍗沖彲錛屽涓嬫墍紺猴細 銆銆鍚勬暟鎹簱閮芥嫢鏈変竴涓浉浼肩殑閰嶇疆鍙傛暟 鈥斺?discover_db錛屽畠鍙惎鐢ㄦ垨紱佺敤鏁版嵁搴撳彂鐜幫紝濡備笅鎵紺猴細 銆銆榪欓噷瑕侀噸鐐規(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>
銆銆7銆佹墜鍔ㄩ厤緗暟鎹簱榪為氭?/p>
銆銆濡傛灉鎮(zhèn)ㄤ簡瑙i厤緗繛閫氭ф墍蹇呴渶鐨勬墍鏈変俊鎭紝閭d箞鍙互浣跨敤 Configuration Assistant 涓殑 Add Database 鍚戝銆?/p>
銆銆(1)銆佸繀欏婚鍏堢紪鐩妭鐐?鎴?DB2 鏈嶅姟鍣?涓庡疄渚嬬殑緇撳悎銆?/p>
銆銆(2)銆佺紪鐩暟鎹簱 銆8銆佸垪涓捐妭鐐瑰拰鏁版嵁搴撶洰褰曘銆瑕佸湪 node 鐩綍涓垪涓炬湇鍔″櫒涓庡疄渚嬬殑緇撳悎錛屽彲浣跨敤濡備笅鍛戒護錛?/p>
銆銆瑕佸垪涓?database 鐩綍錛屽彲浣跨敤濡備笅鍛戒護錛?/p>
銆銆9銆侀檮鍔犲埌瀹炰緥騫惰繛鎺ュ埌鏁版嵁搴?/p>
銆銆閫氳繃緙栫洰鑺傜偣鍜屾暟鎹簱璁劇疆瀹屽鎴鋒満/鏈嶅姟鍣ㄨ繛閫氭у悗錛屾?zhèn)ㄥ彲闄勫姞鍒板疄渚嬩互杩涜瀹炰緥珩斀帯鐞嗕徽d姟錛屼篃鍙繛鎺ュ埌鏁版嵁搴撲互璇誨彇璇ユ暟鎹簱涓殑鏁版嵁鎴栧悜鏁版嵁搴撳啓鍏ユ暟鎹?/p>
銆銆瑕侀檮鍔犲埌 DB2 瀹炰緥錛屽彲浣跨敤 DB2 鍛戒護 attach錛屽涓嬫墍紺猴細 銆銆闄勫姞鍒板疄渚嬪悗錛屾?zhèn)ㄥ彲鍦ㄨ瀹炰緥涓婃墽琛尳帯鐞嗕徽d姟錛屼緥濡傦細 銆銆鈼?鍒涘緩鍜屽垹闄ゆ暟鎹簱 銆銆鈼?媯绱€佹洿鏂板拰閲嶇疆鏁版嵁搴撶鐞嗗櫒鍙婃暟鎹簱閰嶇疆鍙傛暟 銆銆鈼?綆$悊鏁版嵁搴撶洃鎺х▼搴?/p>
銆銆鈼?澶囦喚銆佽繕鍘熷拰鍓嶆粴鏁版嵁搴?/p>
銆銆鈼?寮哄埗鐢ㄦ埛鍜屽簲鐢ㄧ▼搴忎笌瀹炰緥涓畾涔夌殑鏁版嵁搴撴柇寮榪炴帴 銆銆瑕佽繛鎺ュ埌鏁版嵁搴擄紝浠ラ夋嫨銆佹彃鍏ャ佹洿鏂版垨鍒犻櫎鏁版嵁錛屾?zhèn)ㄥ繀椤婚鍏堥氳繃浠ヤ笅鏂瑰紡榪炴帴鍒版暟鎹簱錛?/p>
銆銆榪炴帴鍒版暟鎹簱涔嬪悗錛屽氨鍙互榪涜鏁版嵁搴撶殑鐩稿簲鎿嶄綔浜嗐?/p>
db2set DB2COMM=TCPIP
db2 update database manager configuration using svcename 50000
db2stop
db2start
db2admin start
db2 update admin configuration using discover search
db2 update database manager configuration using discover_inst enable
db2 update database configuration for database_name using discover_db enable
db2cfimp access_profile_name
db2 catalog tcpip node mynode remote db2server.mycompany.com server db2icdb
db2 catalog netbios node jeremy remote N01FCBE3 adapter 0
db2 catalog database sample as mysamp at node mynode
db2 catalog database baydb as newbaydb at node mynode
db2 list node directory
db2 list database directory
attach to nodename user username using password
connect to database_name user username using password
[new new_password confirm new_password ]