diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2023-03-29 20:33:16 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2023-03-29 20:33:16 +0300 |
commit | f60fe7e831e6ac2fc817b503a89e98b4396cd6c2 (patch) | |
tree | 9f9bd533638a43b4676f97565efb381e5cbe5f8c | |
parent | 3d7e2e99724fdb52daabcd39f1ee6cffe70ee75f (diff) | |
download | gawk-f60fe7e831e6ac2fc817b503a89e98b4396cd6c2.tar.gz |
More doc updates.
-rw-r--r-- | doc/ChangeLog | 4 | ||||
-rw-r--r-- | doc/gawk.info | 1077 | ||||
-rw-r--r-- | doc/gawk.texi | 46 | ||||
-rw-r--r-- | doc/gawktexi.in | 19 |
4 files changed, 603 insertions, 543 deletions
diff --git a/doc/ChangeLog b/doc/ChangeLog index 07425432..f8d9bf24 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -3,6 +3,10 @@ * texinfo.tex: Sync from Texinfo. * gawktexi.in (Dynamic Typing): Add a quote. (Common Extensions): Sort the table entries, sort of. + * gawktexi.in: Several fixes related to CSV; thanks to + Antonio Columbo. Note that `nawk' is BWK awk. + (Common Extensions): Add entries to the table for \u and + CSV support. 2023-03-26 Arnold D. Robbins <arnold@skeeve.com> diff --git a/doc/gawk.info b/doc/gawk.info index 7f1de2d5..614a7154 100644 --- a/doc/gawk.info +++ b/doc/gawk.info @@ -5126,7 +5126,7 @@ separator. To do this, use the special ‘BEGIN’ pattern (*note BEGIN/END::). For example, here we set the value of ‘FS’ to the string ‘":"’: - awk 'BEGIN { FS = "," } ; { print $2 }' + awk 'BEGIN { FS = ":" } ; { print $2 }' Given the input line: @@ -5324,6 +5324,11 @@ newlines that are not enclosed in double quotes. Thus, use of the ‘--csv’ totally overrides normal record processing with ‘RS’ (*note Records::). + Carriage-Return–Line-Feed Line Endings In CSV Files + + ‘\r\n’ is the invention of the devil. + — _Brian Kernighan_ + Many CSV files are imported from systems where the line terminator for text files is a carriage-return–line-feed pair (CR-LF, ‘\r’ followed by ‘\n’). For ease of use, when processing CSV files, ‘gawk’ simply @@ -8244,7 +8249,7 @@ Other Versions::) elide the backslash and newline, as in C: In POSIX mode (*note Options::), ‘gawk’ does not allow escaped newlines. Otherwise, it behaves as just described. - BWK ‘awk’ and BusyBox ‘awk’ remove the backslash but leave the + BWK ‘awk’(2) and BusyBox ‘awk’ remove the backslash but leave the newline intact, as part of the string: $ nawk 'BEGIN { print "hello, \ @@ -8259,6 +8264,8 @@ uses double-precision floating-point numbers. On most modern systems, these are in IEEE 754 standard format. *Note Arbitrary Precision Arithmetic::, for much more information. + (2) In all examples throughout this Info file, ‘nawk’ is BWK ‘awk’. + File: gawk.info, Node: Nondecimal-numbers, Next: Regexp Constants, Prev: Scalar Constants, Up: Constants @@ -15544,9 +15551,9 @@ others do this: ⊣ 1 Or ‘awk’ could wait until runtime to set the type of ‘a’. In this -case, since ‘a’ was never assigned used before being passed to the -function, how the function uses it forces the type to be resolved to -either scalar or array. ‘gawk’ and the MKS ‘awk’ do this: +case, since ‘a’ was never used before being passed to the function, how +the function uses it forces the type to be resolved to either scalar or +array. ‘gawk’ and the MKS ‘awk’ do this: $ gawk -v A=0 -f funky.awk ⊣ <> @@ -30930,7 +30937,7 @@ unfortunately. It added the following features: • The ability to make ‘gawk’ buffer output to pipes (*note Noflush::). - • The ‘\u’ escape sequence (*note Escape Sequences::) + • The ‘\u’ escape sequence (*note Escape Sequences::). • The need for GNU ‘libsigsegv’ was removed from ‘gawk’. The value-add was never very much and it caused problems in some @@ -30950,10 +30957,12 @@ Feature BWK ‘awk’ ‘mawk’ ‘gawk’ Now stand -------------------------------------------------------------------------- ‘**’ and ‘**=’ operators X X ‘\x’ escape sequence X X X +‘\u’ escape sequence X X ‘/dev/stdin’ special file X X X ‘/dev/stdout’ special file X X X ‘/dev/stderr’ special file X X X ‘BINMODE’ variable X X +CSV support X X ‘FS’ as null string X X X ‘delete’ without subscript X X X X ‘fflush()’ function X X X X @@ -38448,7 +38457,6 @@ Index * OFS variable <1>: Output Separators. (line 6) * OFS variable <2>: User-modified. (line 116) * op-codes, trace of internal: Options. (line 197) -* op-codes, trace of internal <1>: Options. (line 203) * OpenBSD: Glossary. (line 747) * OpenSolaris: Other Versions. (line 100) * operating systems, BSD-based: Manual History. (line 28) @@ -39087,6 +39095,8 @@ Index (line 50) * sidebar, RS = "\0" Is Not Portable: gawk split records. (line 75) * sidebar, Understanding $0: Changing Fields. (line 135) +* sidebar, Carriage-Return–Line-Feed Line Endings In CSV Files: Comma Separated Fields. + (line 45) * sidebar, Changing FS Does Not Affect the Fields: Full Line Fields. (line 14) * sidebar, FS and IGNORECASE: Field Splitting Summary. @@ -39649,532 +39659,533 @@ Node: Regexp Field Splitting243342 Node: Single Character Fields247171 Node: Comma Separated Fields248260 Ref: table-csv-examples249679 -Node: Command Line Field Separator251448 -Node: Full Line Fields254834 -Ref: Full Line Fields-Footnote-1256414 -Ref: Full Line Fields-Footnote-2256460 -Node: Field Splitting Summary256568 -Node: Constant Size259002 -Node: Fixed width data259746 -Node: Skipping intervening263265 -Node: Allowing trailing data264067 -Node: Fields with fixed data265132 -Node: Splitting By Content266758 -Ref: Splitting By Content-Footnote-1271027 -Node: More CSV271190 -Node: FS versus FPAT272843 -Node: Testing field creation274052 -Node: Multiple Line275830 -Node: Getline282312 -Node: Plain Getline284898 -Node: Getline/Variable287548 -Node: Getline/File288745 -Node: Getline/Variable/File290193 -Ref: Getline/Variable/File-Footnote-1291838 -Node: Getline/Pipe291934 -Node: Getline/Variable/Pipe294747 -Node: Getline/Coprocess295930 -Node: Getline/Variable/Coprocess297253 -Node: Getline Notes298019 -Node: Getline Summary300980 -Ref: table-getline-variants301424 -Node: Read Timeout302329 -Ref: Read Timeout-Footnote-1306293 -Node: Retrying Input306351 -Node: Command-line directories307618 -Node: Input Summary308556 -Node: Input Exercises311936 -Node: Printing312376 -Node: Print314319 -Node: Print Examples315825 -Node: Output Separators318678 -Node: OFMT320789 -Node: Printf322212 -Node: Basic Printf323017 -Node: Control Letters324653 -Node: Format Modifiers330122 -Node: Printf Examples336408 -Node: Redirection338953 -Node: Special FD346027 -Ref: Special FD-Footnote-1349317 -Node: Special Files349403 -Node: Other Inherited Files350032 -Node: Special Network351097 -Node: Special Caveats351985 -Node: Close Files And Pipes352968 -Ref: Close Files And Pipes-Footnote-1359104 -Node: Close Return Value359260 -Ref: table-close-pipe-return-values360535 -Ref: Close Return Value-Footnote-1361369 -Node: Noflush361525 -Node: Nonfatal363037 -Node: Output Summary365454 -Node: Output Exercises366740 -Node: Expressions367431 -Node: Values368633 -Node: Constants369311 -Node: Scalar Constants370008 -Ref: Scalar Constants-Footnote-1372583 -Node: Nondecimal-numbers372833 -Node: Regexp Constants375954 -Node: Using Constant Regexps376500 -Node: Standard Regexp Constants377146 -Node: Strong Regexp Constants380446 -Node: Variables384297 -Node: Using Variables384962 -Node: Assignment Options386942 -Node: Conversion389504 -Node: Strings And Numbers390036 -Ref: Strings And Numbers-Footnote-1393255 -Node: Locale influences conversions393364 -Ref: table-locale-affects396214 -Node: All Operators396857 -Node: Arithmetic Ops397498 -Node: Concatenation400328 -Ref: Concatenation-Footnote-1403278 -Node: Assignment Ops403401 -Ref: table-assign-ops408540 -Node: Increment Ops409922 -Node: Truth Values and Conditions413521 -Node: Truth Values414647 -Node: Typing and Comparison415738 -Node: Variable Typing416574 -Ref: Variable Typing-Footnote-1423236 -Ref: Variable Typing-Footnote-2423316 -Node: Comparison Operators423399 -Ref: table-relational-ops423826 -Node: POSIX String Comparison427512 -Ref: POSIX String Comparison-Footnote-1429271 -Ref: POSIX String Comparison-Footnote-2429414 -Node: Boolean Ops429498 -Ref: Boolean Ops-Footnote-1434191 -Node: Conditional Exp434287 -Node: Function Calls436073 -Node: Precedence440023 -Node: Locales443900 -Node: Expressions Summary445582 -Node: Patterns and Actions448245 -Node: Pattern Overview449387 -Node: Regexp Patterns451113 -Node: Expression Patterns451659 -Node: Ranges455568 -Node: BEGIN/END458746 -Node: Using BEGIN/END459559 -Ref: Using BEGIN/END-Footnote-1462469 -Node: I/O And BEGIN/END462579 -Node: BEGINFILE/ENDFILE465060 -Node: Empty468501 -Node: Using Shell Variables468818 -Node: Action Overview471156 -Node: Statements473591 -Node: If Statement475489 -Node: While Statement477058 -Node: Do Statement479146 -Node: For Statement480332 -Node: Switch Statement483689 -Node: Break Statement486240 -Node: Continue Statement488432 -Node: Next Statement490364 -Node: Nextfile Statement492861 -Node: Exit Statement495722 -Node: Built-in Variables498255 -Node: User-modified499434 -Node: Auto-set507645 -Ref: Auto-set-Footnote-1525744 -Ref: Auto-set-Footnote-2525962 -Node: ARGC and ARGV526018 -Node: Pattern Action Summary530457 -Node: Arrays533073 -Node: Array Basics534450 -Node: Array Intro535300 -Ref: figure-array-elements537316 -Ref: Array Intro-Footnote-1540185 -Node: Reference to Elements540317 -Node: Assigning Elements542839 -Node: Array Example543334 -Node: Scanning an Array545303 -Node: Controlling Scanning548400 -Ref: Controlling Scanning-Footnote-1555063 -Node: Numeric Array Subscripts555387 -Node: Uninitialized Subscripts557661 -Node: Delete559340 -Ref: Delete-Footnote-1562154 -Node: Multidimensional562211 -Node: Multiscanning565416 -Node: Arrays of Arrays567088 -Node: Arrays Summary571988 -Node: Functions574177 -Node: Built-in575237 -Node: Calling Built-in576426 -Node: Boolean Functions578473 -Node: Numeric Functions579043 -Ref: Numeric Functions-Footnote-1583236 -Ref: Numeric Functions-Footnote-2583920 -Ref: Numeric Functions-Footnote-3583972 -Node: String Functions584248 -Ref: String Functions-Footnote-1610479 -Ref: String Functions-Footnote-2610613 -Ref: String Functions-Footnote-3610873 -Node: Gory Details610960 -Ref: table-sub-escapes612867 -Ref: table-sub-proposed614513 -Ref: table-posix-sub616023 -Ref: table-gensub-escapes617711 -Ref: Gory Details-Footnote-1618645 -Node: I/O Functions618799 -Ref: table-system-return-values625486 -Ref: I/O Functions-Footnote-1627657 -Ref: I/O Functions-Footnote-2627805 -Node: Time Functions627925 -Ref: Time Functions-Footnote-1639081 -Ref: Time Functions-Footnote-2639157 -Ref: Time Functions-Footnote-3639319 -Ref: Time Functions-Footnote-4639430 -Ref: Time Functions-Footnote-5639548 -Ref: Time Functions-Footnote-6639783 -Node: Bitwise Functions640065 -Ref: table-bitwise-ops640667 -Ref: Bitwise Functions-Footnote-1646921 -Ref: Bitwise Functions-Footnote-2647100 -Node: Type Functions647297 -Node: I18N Functions650890 -Node: User-defined652633 -Node: Definition Syntax653453 -Ref: Definition Syntax-Footnote-1659281 -Node: Function Example659358 -Ref: Function Example-Footnote-1662337 -Node: Function Calling662359 -Node: Calling A Function662953 -Node: Variable Scope663923 -Node: Pass By Value/Reference666977 -Node: Function Caveats669709 -Ref: Function Caveats-Footnote-1671804 -Node: Return Statement671928 -Node: Dynamic Typing674983 -Node: Indirect Calls677380 -Node: Functions Summary688539 -Node: Library Functions691316 -Ref: Library Functions-Footnote-1694864 -Ref: Library Functions-Footnote-2695007 -Node: Library Names695182 -Ref: Library Names-Footnote-1698976 -Ref: Library Names-Footnote-2699203 -Node: General Functions699299 -Node: Strtonum Function700493 -Node: Assert Function703575 -Node: Round Function707027 -Node: Cliff Random Function708605 -Node: Ordinal Functions709638 -Ref: Ordinal Functions-Footnote-1712747 -Ref: Ordinal Functions-Footnote-2712999 -Node: Join Function713213 -Ref: Join Function-Footnote-1715016 -Node: Getlocaltime Function715220 -Node: Readfile Function718994 -Node: Shell Quoting721023 -Node: Isnumeric Function722479 -Node: Data File Management723891 -Node: Filetrans Function724523 -Node: Rewind Function728817 -Node: File Checking730796 -Ref: File Checking-Footnote-1732168 -Node: Empty Files732375 -Node: Ignoring Assigns734442 -Node: Getopt Function736016 -Ref: Getopt Function-Footnote-1751850 -Node: Passwd Functions752062 -Ref: Passwd Functions-Footnote-1761244 -Node: Group Functions761332 -Ref: Group Functions-Footnote-1769470 -Node: Walking Arrays769683 -Node: Library Functions Summary772731 -Node: Library Exercises774155 -Node: Sample Programs774642 -Node: Running Examples775424 -Node: Clones776176 -Node: Cut Program777448 -Node: Egrep Program787889 -Node: Id Program797206 -Node: Split Program807320 -Ref: Split Program-Footnote-1817555 -Node: Tee Program817742 -Node: Uniq Program820651 -Node: Wc Program828516 -Node: Bytes vs. Characters828911 -Node: Using extensions830513 -Node: wc program831293 -Node: Miscellaneous Programs836299 -Node: Dupword Program837528 -Node: Alarm Program839591 -Node: Translate Program844504 -Ref: Translate Program-Footnote-1849245 -Node: Labels Program849523 -Ref: Labels Program-Footnote-1852964 -Node: Word Sorting853056 -Node: History Sorting857250 -Node: Extract Program859525 -Node: Simple Sed867794 -Node: Igawk Program871010 -Ref: Igawk Program-Footnote-1886257 -Ref: Igawk Program-Footnote-2886463 -Ref: Igawk Program-Footnote-3886593 -Node: Anagram Program886720 -Node: Signature Program889816 -Node: Programs Summary891068 -Node: Programs Exercises892326 -Ref: Programs Exercises-Footnote-1896642 -Node: Advanced Features896728 -Node: Nondecimal Data899222 -Node: Boolean Typed Values900852 -Node: Array Sorting902827 -Node: Controlling Array Traversal903556 -Ref: Controlling Array Traversal-Footnote-1912063 -Node: Array Sorting Functions912185 -Ref: Array Sorting Functions-Footnote-1918304 -Node: Two-way I/O918512 -Ref: Two-way I/O-Footnote-1926507 -Ref: Two-way I/O-Footnote-2926698 -Node: TCP/IP Networking926780 -Node: Profiling929960 -Node: Persistent Memory939670 -Ref: Persistent Memory-Footnote-1948628 -Node: Extension Philosophy948759 -Node: Advanced Features Summary950294 -Node: Internationalization952564 -Node: I18N and L10N954270 -Node: Explaining gettext954965 -Ref: Explaining gettext-Footnote-1961118 -Ref: Explaining gettext-Footnote-2961313 -Node: Programmer i18n961478 -Ref: Programmer i18n-Footnote-1966591 -Node: Translator i18n966640 -Node: String Extraction967476 -Ref: String Extraction-Footnote-1968654 -Node: Printf Ordering968752 -Ref: Printf Ordering-Footnote-1971614 -Node: I18N Portability971682 -Ref: I18N Portability-Footnote-1974256 -Node: I18N Example974327 -Ref: I18N Example-Footnote-1977727 -Ref: I18N Example-Footnote-2977803 -Node: Gawk I18N977920 -Node: I18N Summary978576 -Node: Debugger979977 -Node: Debugging981001 -Node: Debugging Concepts981450 -Node: Debugging Terms983276 -Node: Awk Debugging985889 -Ref: Awk Debugging-Footnote-1986866 -Node: Sample Debugging Session987006 -Node: Debugger Invocation987558 -Node: Finding The Bug989187 -Node: List of Debugger Commands995873 -Node: Breakpoint Control997250 -Node: Debugger Execution Control1001082 -Node: Viewing And Changing Data1004562 -Node: Execution Stack1008300 -Node: Debugger Info1009981 -Node: Miscellaneous Debugger Commands1014280 -Node: Readline Support1019533 -Node: Limitations1020479 -Node: Debugging Summary1023123 -Node: Namespaces1024426 -Node: Global Namespace1025553 -Node: Qualified Names1026998 -Node: Default Namespace1028033 -Node: Changing The Namespace1028808 -Node: Naming Rules1030502 -Node: Internal Name Management1032417 -Node: Namespace Example1033487 -Node: Namespace And Features1036070 -Node: Namespace Summary1037527 -Node: Arbitrary Precision Arithmetic1039040 -Node: Computer Arithmetic1040559 -Ref: table-numeric-ranges1044376 -Ref: table-floating-point-ranges1044874 -Ref: Computer Arithmetic-Footnote-11045533 -Node: Math Definitions1045592 -Ref: table-ieee-formats1048637 -Node: MPFR features1049211 -Node: MPFR On Parole1049664 -Ref: MPFR On Parole-Footnote-11050508 -Node: MPFR Intro1050667 -Node: FP Math Caution1052357 -Ref: FP Math Caution-Footnote-11053431 -Node: Inexactness of computations1053808 -Node: Inexact representation1054839 -Node: Comparing FP Values1056222 -Node: Errors accumulate1057480 -Node: Strange values1058947 -Ref: Strange values-Footnote-11061613 -Node: Getting Accuracy1061718 -Node: Try To Round1064455 -Node: Setting precision1065362 -Ref: table-predefined-precision-strings1066067 -Node: Setting the rounding mode1067952 -Ref: table-gawk-rounding-modes1068334 -Ref: Setting the rounding mode-Footnote-11072392 -Node: Arbitrary Precision Integers1072575 -Ref: Arbitrary Precision Integers-Footnote-11075787 -Node: Checking for MPFR1075943 -Node: POSIX Floating Point Problems1077433 -Ref: POSIX Floating Point Problems-Footnote-11082297 -Node: Floating point summary1082335 -Node: Dynamic Extensions1084599 -Node: Extension Intro1086198 -Node: Plugin License1087506 -Node: Extension Mechanism Outline1088319 -Ref: figure-load-extension1088770 -Ref: figure-register-new-function1090355 -Ref: figure-call-new-function1091465 -Node: Extension API Description1093589 -Node: Extension API Functions Introduction1095318 -Ref: table-api-std-headers1097216 -Node: General Data Types1101680 -Ref: General Data Types-Footnote-11110848 -Node: Memory Allocation Functions1111163 -Ref: Memory Allocation Functions-Footnote-11115888 -Node: Constructor Functions1115987 -Node: API Ownership of MPFR and GMP Values1119892 -Node: Registration Functions1121453 -Node: Extension Functions1122157 -Node: Exit Callback Functions1127733 -Node: Extension Version String1129052 -Node: Input Parsers1129747 -Node: Output Wrappers1144391 -Node: Two-way processors1149239 -Node: Printing Messages1151600 -Ref: Printing Messages-Footnote-11152814 -Node: Updating ERRNO1152969 -Node: Requesting Values1153768 -Ref: table-value-types-returned1154521 -Node: Accessing Parameters1155630 -Node: Symbol Table Access1156914 -Node: Symbol table by name1157430 -Ref: Symbol table by name-Footnote-11160641 -Node: Symbol table by cookie1160773 -Ref: Symbol table by cookie-Footnote-11165054 -Node: Cached values1165118 -Ref: Cached values-Footnote-11168762 -Node: Array Manipulation1168919 -Ref: Array Manipulation-Footnote-11170022 -Node: Array Data Types1170059 -Ref: Array Data Types-Footnote-11172881 -Node: Array Functions1172981 -Node: Flattening Arrays1178010 -Node: Creating Arrays1185062 -Node: Redirection API1189912 -Node: Extension API Variables1192933 -Node: Extension Versioning1193658 -Ref: gawk-api-version1194095 -Node: Extension GMP/MPFR Versioning1195883 -Node: Extension API Informational Variables1197589 -Node: Extension API Boilerplate1198750 -Node: Changes from API V11202886 -Node: Finding Extensions1204520 -Node: Extension Example1205095 -Node: Internal File Description1205919 -Node: Internal File Ops1210243 -Ref: Internal File Ops-Footnote-11221801 -Node: Using Internal File Ops1221949 -Ref: Using Internal File Ops-Footnote-11224380 -Node: Extension Samples1224658 -Node: Extension Sample File Functions1226227 -Node: Extension Sample Fnmatch1234365 -Node: Extension Sample Fork1235960 -Node: Extension Sample Inplace1237236 -Node: Extension Sample Ord1240908 -Node: Extension Sample Readdir1241784 -Ref: table-readdir-file-types1242681 -Node: Extension Sample Revout1243819 -Node: Extension Sample Rev2way1244416 -Node: Extension Sample Read write array1245168 -Node: Extension Sample Readfile1248442 -Node: Extension Sample Time1249573 -Node: Extension Sample API Tests1251863 -Node: gawkextlib1252371 -Node: Extension summary1255407 -Node: Extension Exercises1259265 -Node: Language History1260543 -Node: V7/SVR3.11262257 -Node: SVR41264607 -Node: POSIX1266139 -Node: BTL1267564 -Node: POSIX/GNU1268333 -Node: Feature History1274864 -Node: Common Extensions1294430 -Node: Ranges and Locales1295799 -Ref: Ranges and Locales-Footnote-11300600 -Ref: Ranges and Locales-Footnote-21300627 -Ref: Ranges and Locales-Footnote-31300866 -Node: Contributors1301089 -Node: History summary1307294 -Node: Installation1308740 -Node: Gawk Distribution1309704 -Node: Getting1310196 -Node: Extracting1311195 -Node: Distribution contents1312907 -Node: Unix Installation1320987 -Node: Quick Installation1321809 -Node: Compiling with MPFR1324355 -Node: Shell Startup Files1325061 -Node: Additional Configuration Options1326218 -Node: Configuration Philosophy1328605 -Node: Compiling from Git1331107 -Node: Building the Documentation1331666 -Node: Non-Unix Installation1333078 -Node: PC Installation1333554 -Node: PC Binary Installation1334427 -Node: PC Compiling1335332 -Node: PC Using1336510 -Node: Cygwin1340238 -Node: MSYS1341494 -Node: OpenVMS Installation1342126 -Node: OpenVMS Compilation1342807 -Ref: OpenVMS Compilation-Footnote-11344290 -Node: OpenVMS Dynamic Extensions1344352 -Node: OpenVMS Installation Details1345988 -Node: OpenVMS Running1348423 -Node: OpenVMS GNV1352560 -Node: Bugs1353315 -Node: Bug definition1354239 -Node: Bug address1357890 -Node: Usenet1361481 -Node: Performance bugs1362712 -Node: Asking for help1365730 -Node: Maintainers1367721 -Node: Other Versions1368748 -Node: Installation summary1377680 -Node: Notes1379064 -Node: Compatibility Mode1379874 -Node: Additions1380696 -Node: Accessing The Source1381641 -Node: Adding Code1383176 -Node: New Ports1390312 -Node: Derived Files1394822 -Ref: Derived Files-Footnote-11400669 -Ref: Derived Files-Footnote-21400704 -Ref: Derived Files-Footnote-31401321 -Node: Future Extensions1401435 -Node: Implementation Limitations1402107 -Node: Extension Design1403349 -Node: Old Extension Problems1404513 -Ref: Old Extension Problems-Footnote-11406089 -Node: Extension New Mechanism Goals1406150 -Ref: Extension New Mechanism Goals-Footnote-11409646 -Node: Extension Other Design Decisions1409847 -Node: Extension Future Growth1412046 -Node: Notes summary1412670 -Node: Basic Concepts1413883 -Node: Basic High Level1414568 -Ref: figure-general-flow1414850 -Ref: figure-process-flow1415557 -Ref: Basic High Level-Footnote-11418958 -Node: Basic Data Typing1419147 -Node: Glossary1422565 -Node: Copying1455687 -Node: GNU Free Documentation License1493448 -Node: Index1518771 +Node: Command Line Field Separator251609 +Node: Full Line Fields254995 +Ref: Full Line Fields-Footnote-1256575 +Ref: Full Line Fields-Footnote-2256621 +Node: Field Splitting Summary256729 +Node: Constant Size259163 +Node: Fixed width data259907 +Node: Skipping intervening263426 +Node: Allowing trailing data264228 +Node: Fields with fixed data265293 +Node: Splitting By Content266919 +Ref: Splitting By Content-Footnote-1271188 +Node: More CSV271351 +Node: FS versus FPAT273004 +Node: Testing field creation274213 +Node: Multiple Line275991 +Node: Getline282473 +Node: Plain Getline285059 +Node: Getline/Variable287709 +Node: Getline/File288906 +Node: Getline/Variable/File290354 +Ref: Getline/Variable/File-Footnote-1291999 +Node: Getline/Pipe292095 +Node: Getline/Variable/Pipe294908 +Node: Getline/Coprocess296091 +Node: Getline/Variable/Coprocess297414 +Node: Getline Notes298180 +Node: Getline Summary301141 +Ref: table-getline-variants301585 +Node: Read Timeout302490 +Ref: Read Timeout-Footnote-1306454 +Node: Retrying Input306512 +Node: Command-line directories307779 +Node: Input Summary308717 +Node: Input Exercises312097 +Node: Printing312537 +Node: Print314480 +Node: Print Examples315986 +Node: Output Separators318839 +Node: OFMT320950 +Node: Printf322373 +Node: Basic Printf323178 +Node: Control Letters324814 +Node: Format Modifiers330283 +Node: Printf Examples336569 +Node: Redirection339114 +Node: Special FD346188 +Ref: Special FD-Footnote-1349478 +Node: Special Files349564 +Node: Other Inherited Files350193 +Node: Special Network351258 +Node: Special Caveats352146 +Node: Close Files And Pipes353129 +Ref: Close Files And Pipes-Footnote-1359265 +Node: Close Return Value359421 +Ref: table-close-pipe-return-values360696 +Ref: Close Return Value-Footnote-1361530 +Node: Noflush361686 +Node: Nonfatal363198 +Node: Output Summary365615 +Node: Output Exercises366901 +Node: Expressions367592 +Node: Values368794 +Node: Constants369472 +Node: Scalar Constants370169 +Ref: Scalar Constants-Footnote-1372747 +Ref: Scalar Constants-Footnote-2372997 +Node: Nondecimal-numbers373077 +Node: Regexp Constants376198 +Node: Using Constant Regexps376744 +Node: Standard Regexp Constants377390 +Node: Strong Regexp Constants380690 +Node: Variables384541 +Node: Using Variables385206 +Node: Assignment Options387186 +Node: Conversion389748 +Node: Strings And Numbers390280 +Ref: Strings And Numbers-Footnote-1393499 +Node: Locale influences conversions393608 +Ref: table-locale-affects396458 +Node: All Operators397101 +Node: Arithmetic Ops397742 +Node: Concatenation400572 +Ref: Concatenation-Footnote-1403522 +Node: Assignment Ops403645 +Ref: table-assign-ops408784 +Node: Increment Ops410166 +Node: Truth Values and Conditions413765 +Node: Truth Values414891 +Node: Typing and Comparison415982 +Node: Variable Typing416818 +Ref: Variable Typing-Footnote-1423480 +Ref: Variable Typing-Footnote-2423560 +Node: Comparison Operators423643 +Ref: table-relational-ops424070 +Node: POSIX String Comparison427756 +Ref: POSIX String Comparison-Footnote-1429515 +Ref: POSIX String Comparison-Footnote-2429658 +Node: Boolean Ops429742 +Ref: Boolean Ops-Footnote-1434435 +Node: Conditional Exp434531 +Node: Function Calls436317 +Node: Precedence440267 +Node: Locales444144 +Node: Expressions Summary445826 +Node: Patterns and Actions448489 +Node: Pattern Overview449631 +Node: Regexp Patterns451357 +Node: Expression Patterns451903 +Node: Ranges455812 +Node: BEGIN/END458990 +Node: Using BEGIN/END459803 +Ref: Using BEGIN/END-Footnote-1462713 +Node: I/O And BEGIN/END462823 +Node: BEGINFILE/ENDFILE465304 +Node: Empty468745 +Node: Using Shell Variables469062 +Node: Action Overview471400 +Node: Statements473835 +Node: If Statement475733 +Node: While Statement477302 +Node: Do Statement479390 +Node: For Statement480576 +Node: Switch Statement483933 +Node: Break Statement486484 +Node: Continue Statement488676 +Node: Next Statement490608 +Node: Nextfile Statement493105 +Node: Exit Statement495966 +Node: Built-in Variables498499 +Node: User-modified499678 +Node: Auto-set507889 +Ref: Auto-set-Footnote-1525988 +Ref: Auto-set-Footnote-2526206 +Node: ARGC and ARGV526262 +Node: Pattern Action Summary530701 +Node: Arrays533317 +Node: Array Basics534694 +Node: Array Intro535544 +Ref: figure-array-elements537560 +Ref: Array Intro-Footnote-1540429 +Node: Reference to Elements540561 +Node: Assigning Elements543083 +Node: Array Example543578 +Node: Scanning an Array545547 +Node: Controlling Scanning548644 +Ref: Controlling Scanning-Footnote-1555307 +Node: Numeric Array Subscripts555631 +Node: Uninitialized Subscripts557905 +Node: Delete559584 +Ref: Delete-Footnote-1562398 +Node: Multidimensional562455 +Node: Multiscanning565660 +Node: Arrays of Arrays567332 +Node: Arrays Summary572232 +Node: Functions574421 +Node: Built-in575481 +Node: Calling Built-in576670 +Node: Boolean Functions578717 +Node: Numeric Functions579287 +Ref: Numeric Functions-Footnote-1583480 +Ref: Numeric Functions-Footnote-2584164 +Ref: Numeric Functions-Footnote-3584216 +Node: String Functions584492 +Ref: String Functions-Footnote-1610723 +Ref: String Functions-Footnote-2610857 +Ref: String Functions-Footnote-3611117 +Node: Gory Details611204 +Ref: table-sub-escapes613111 +Ref: table-sub-proposed614757 +Ref: table-posix-sub616267 +Ref: table-gensub-escapes617955 +Ref: Gory Details-Footnote-1618889 +Node: I/O Functions619043 +Ref: table-system-return-values625730 +Ref: I/O Functions-Footnote-1627901 +Ref: I/O Functions-Footnote-2628049 +Node: Time Functions628169 +Ref: Time Functions-Footnote-1639325 +Ref: Time Functions-Footnote-2639401 +Ref: Time Functions-Footnote-3639563 +Ref: Time Functions-Footnote-4639674 +Ref: Time Functions-Footnote-5639792 +Ref: Time Functions-Footnote-6640027 +Node: Bitwise Functions640309 +Ref: table-bitwise-ops640911 +Ref: Bitwise Functions-Footnote-1647165 +Ref: Bitwise Functions-Footnote-2647344 +Node: Type Functions647541 +Node: I18N Functions651134 +Node: User-defined652877 +Node: Definition Syntax653697 +Ref: Definition Syntax-Footnote-1659525 +Node: Function Example659602 +Ref: Function Example-Footnote-1662581 +Node: Function Calling662603 +Node: Calling A Function663197 +Node: Variable Scope664167 +Node: Pass By Value/Reference667221 +Node: Function Caveats669953 +Ref: Function Caveats-Footnote-1672048 +Node: Return Statement672172 +Node: Dynamic Typing675227 +Node: Indirect Calls677615 +Node: Functions Summary688774 +Node: Library Functions691551 +Ref: Library Functions-Footnote-1695099 +Ref: Library Functions-Footnote-2695242 +Node: Library Names695417 +Ref: Library Names-Footnote-1699211 +Ref: Library Names-Footnote-2699438 +Node: General Functions699534 +Node: Strtonum Function700728 +Node: Assert Function703810 +Node: Round Function707262 +Node: Cliff Random Function708840 +Node: Ordinal Functions709873 +Ref: Ordinal Functions-Footnote-1712982 +Ref: Ordinal Functions-Footnote-2713234 +Node: Join Function713448 +Ref: Join Function-Footnote-1715251 +Node: Getlocaltime Function715455 +Node: Readfile Function719229 +Node: Shell Quoting721258 +Node: Isnumeric Function722714 +Node: Data File Management724126 +Node: Filetrans Function724758 +Node: Rewind Function729052 +Node: File Checking731031 +Ref: File Checking-Footnote-1732403 +Node: Empty Files732610 +Node: Ignoring Assigns734677 +Node: Getopt Function736251 +Ref: Getopt Function-Footnote-1752085 +Node: Passwd Functions752297 +Ref: Passwd Functions-Footnote-1761479 +Node: Group Functions761567 +Ref: Group Functions-Footnote-1769705 +Node: Walking Arrays769918 +Node: Library Functions Summary772966 +Node: Library Exercises774390 +Node: Sample Programs774877 +Node: Running Examples775659 +Node: Clones776411 +Node: Cut Program777683 +Node: Egrep Program788124 +Node: Id Program797441 +Node: Split Program807555 +Ref: Split Program-Footnote-1817790 +Node: Tee Program817977 +Node: Uniq Program820886 +Node: Wc Program828751 +Node: Bytes vs. Characters829146 +Node: Using extensions830748 +Node: wc program831528 +Node: Miscellaneous Programs836534 +Node: Dupword Program837763 +Node: Alarm Program839826 +Node: Translate Program844739 +Ref: Translate Program-Footnote-1849480 +Node: Labels Program849758 +Ref: Labels Program-Footnote-1853199 +Node: Word Sorting853291 +Node: History Sorting857485 +Node: Extract Program859760 +Node: Simple Sed868029 +Node: Igawk Program871245 +Ref: Igawk Program-Footnote-1886492 +Ref: Igawk Program-Footnote-2886698 +Ref: Igawk Program-Footnote-3886828 +Node: Anagram Program886955 +Node: Signature Program890051 +Node: Programs Summary891303 +Node: Programs Exercises892561 +Ref: Programs Exercises-Footnote-1896877 +Node: Advanced Features896963 +Node: Nondecimal Data899457 +Node: Boolean Typed Values901087 +Node: Array Sorting903062 +Node: Controlling Array Traversal903791 +Ref: Controlling Array Traversal-Footnote-1912298 +Node: Array Sorting Functions912420 +Ref: Array Sorting Functions-Footnote-1918539 +Node: Two-way I/O918747 +Ref: Two-way I/O-Footnote-1926742 +Ref: Two-way I/O-Footnote-2926933 +Node: TCP/IP Networking927015 +Node: Profiling930195 +Node: Persistent Memory939905 +Ref: Persistent Memory-Footnote-1948863 +Node: Extension Philosophy948994 +Node: Advanced Features Summary950529 +Node: Internationalization952799 +Node: I18N and L10N954505 +Node: Explaining gettext955200 +Ref: Explaining gettext-Footnote-1961353 +Ref: Explaining gettext-Footnote-2961548 +Node: Programmer i18n961713 +Ref: Programmer i18n-Footnote-1966826 +Node: Translator i18n966875 +Node: String Extraction967711 +Ref: String Extraction-Footnote-1968889 +Node: Printf Ordering968987 +Ref: Printf Ordering-Footnote-1971849 +Node: I18N Portability971917 +Ref: I18N Portability-Footnote-1974491 +Node: I18N Example974562 +Ref: I18N Example-Footnote-1977962 +Ref: I18N Example-Footnote-2978038 +Node: Gawk I18N978155 +Node: I18N Summary978811 +Node: Debugger980212 +Node: Debugging981236 +Node: Debugging Concepts981685 +Node: Debugging Terms983511 +Node: Awk Debugging986124 +Ref: Awk Debugging-Footnote-1987101 +Node: Sample Debugging Session987241 +Node: Debugger Invocation987793 +Node: Finding The Bug989422 +Node: List of Debugger Commands996108 +Node: Breakpoint Control997485 +Node: Debugger Execution Control1001317 +Node: Viewing And Changing Data1004797 +Node: Execution Stack1008535 +Node: Debugger Info1010216 +Node: Miscellaneous Debugger Commands1014515 +Node: Readline Support1019768 +Node: Limitations1020714 +Node: Debugging Summary1023358 +Node: Namespaces1024661 +Node: Global Namespace1025788 +Node: Qualified Names1027233 +Node: Default Namespace1028268 +Node: Changing The Namespace1029043 +Node: Naming Rules1030737 +Node: Internal Name Management1032652 +Node: Namespace Example1033722 +Node: Namespace And Features1036305 +Node: Namespace Summary1037762 +Node: Arbitrary Precision Arithmetic1039275 +Node: Computer Arithmetic1040794 +Ref: table-numeric-ranges1044611 +Ref: table-floating-point-ranges1045109 +Ref: Computer Arithmetic-Footnote-11045768 +Node: Math Definitions1045827 +Ref: table-ieee-formats1048872 +Node: MPFR features1049446 +Node: MPFR On Parole1049899 +Ref: MPFR On Parole-Footnote-11050743 +Node: MPFR Intro1050902 +Node: FP Math Caution1052592 +Ref: FP Math Caution-Footnote-11053666 +Node: Inexactness of computations1054043 +Node: Inexact representation1055074 +Node: Comparing FP Values1056457 +Node: Errors accumulate1057715 +Node: Strange values1059182 +Ref: Strange values-Footnote-11061848 +Node: Getting Accuracy1061953 +Node: Try To Round1064690 +Node: Setting precision1065597 +Ref: table-predefined-precision-strings1066302 +Node: Setting the rounding mode1068187 +Ref: table-gawk-rounding-modes1068569 +Ref: Setting the rounding mode-Footnote-11072627 +Node: Arbitrary Precision Integers1072810 +Ref: Arbitrary Precision Integers-Footnote-11076022 +Node: Checking for MPFR1076178 +Node: POSIX Floating Point Problems1077668 +Ref: POSIX Floating Point Problems-Footnote-11082532 +Node: Floating point summary1082570 +Node: Dynamic Extensions1084834 +Node: Extension Intro1086433 +Node: Plugin License1087741 +Node: Extension Mechanism Outline1088554 +Ref: figure-load-extension1089005 +Ref: figure-register-new-function1090590 +Ref: figure-call-new-function1091700 +Node: Extension API Description1093824 +Node: Extension API Functions Introduction1095553 +Ref: table-api-std-headers1097451 +Node: General Data Types1101915 +Ref: General Data Types-Footnote-11111083 +Node: Memory Allocation Functions1111398 +Ref: Memory Allocation Functions-Footnote-11116123 +Node: Constructor Functions1116222 +Node: API Ownership of MPFR and GMP Values1120127 +Node: Registration Functions1121688 +Node: Extension Functions1122392 +Node: Exit Callback Functions1127968 +Node: Extension Version String1129287 +Node: Input Parsers1129982 +Node: Output Wrappers1144626 +Node: Two-way processors1149474 +Node: Printing Messages1151835 +Ref: Printing Messages-Footnote-11153049 +Node: Updating ERRNO1153204 +Node: Requesting Values1154003 +Ref: table-value-types-returned1154756 +Node: Accessing Parameters1155865 +Node: Symbol Table Access1157149 +Node: Symbol table by name1157665 +Ref: Symbol table by name-Footnote-11160876 +Node: Symbol table by cookie1161008 +Ref: Symbol table by cookie-Footnote-11165289 +Node: Cached values1165353 +Ref: Cached values-Footnote-11168997 +Node: Array Manipulation1169154 +Ref: Array Manipulation-Footnote-11170257 +Node: Array Data Types1170294 +Ref: Array Data Types-Footnote-11173116 +Node: Array Functions1173216 +Node: Flattening Arrays1178245 +Node: Creating Arrays1185297 +Node: Redirection API1190147 +Node: Extension API Variables1193168 +Node: Extension Versioning1193893 +Ref: gawk-api-version1194330 +Node: Extension GMP/MPFR Versioning1196118 +Node: Extension API Informational Variables1197824 +Node: Extension API Boilerplate1198985 +Node: Changes from API V11203121 +Node: Finding Extensions1204755 +Node: Extension Example1205330 +Node: Internal File Description1206154 +Node: Internal File Ops1210478 +Ref: Internal File Ops-Footnote-11222036 +Node: Using Internal File Ops1222184 +Ref: Using Internal File Ops-Footnote-11224615 +Node: Extension Samples1224893 +Node: Extension Sample File Functions1226462 +Node: Extension Sample Fnmatch1234600 +Node: Extension Sample Fork1236195 +Node: Extension Sample Inplace1237471 +Node: Extension Sample Ord1241143 +Node: Extension Sample Readdir1242019 +Ref: table-readdir-file-types1242916 +Node: Extension Sample Revout1244054 +Node: Extension Sample Rev2way1244651 +Node: Extension Sample Read write array1245403 +Node: Extension Sample Readfile1248677 +Node: Extension Sample Time1249808 +Node: Extension Sample API Tests1252098 +Node: gawkextlib1252606 +Node: Extension summary1255642 +Node: Extension Exercises1259500 +Node: Language History1260778 +Node: V7/SVR3.11262492 +Node: SVR41264842 +Node: POSIX1266374 +Node: BTL1267799 +Node: POSIX/GNU1268568 +Node: Feature History1275099 +Node: Common Extensions1294666 +Node: Ranges and Locales1296143 +Ref: Ranges and Locales-Footnote-11300944 +Ref: Ranges and Locales-Footnote-21300971 +Ref: Ranges and Locales-Footnote-31301210 +Node: Contributors1301433 +Node: History summary1307638 +Node: Installation1309084 +Node: Gawk Distribution1310048 +Node: Getting1310540 +Node: Extracting1311539 +Node: Distribution contents1313251 +Node: Unix Installation1321331 +Node: Quick Installation1322153 +Node: Compiling with MPFR1324699 +Node: Shell Startup Files1325405 +Node: Additional Configuration Options1326562 +Node: Configuration Philosophy1328949 +Node: Compiling from Git1331451 +Node: Building the Documentation1332010 +Node: Non-Unix Installation1333422 +Node: PC Installation1333898 +Node: PC Binary Installation1334771 +Node: PC Compiling1335676 +Node: PC Using1336854 +Node: Cygwin1340582 +Node: MSYS1341838 +Node: OpenVMS Installation1342470 +Node: OpenVMS Compilation1343151 +Ref: OpenVMS Compilation-Footnote-11344634 +Node: OpenVMS Dynamic Extensions1344696 +Node: OpenVMS Installation Details1346332 +Node: OpenVMS Running1348767 +Node: OpenVMS GNV1352904 +Node: Bugs1353659 +Node: Bug definition1354583 +Node: Bug address1358234 +Node: Usenet1361825 +Node: Performance bugs1363056 +Node: Asking for help1366074 +Node: Maintainers1368065 +Node: Other Versions1369092 +Node: Installation summary1378024 +Node: Notes1379408 +Node: Compatibility Mode1380218 +Node: Additions1381040 +Node: Accessing The Source1381985 +Node: Adding Code1383520 +Node: New Ports1390656 +Node: Derived Files1395166 +Ref: Derived Files-Footnote-11401013 +Ref: Derived Files-Footnote-21401048 +Ref: Derived Files-Footnote-31401665 +Node: Future Extensions1401779 +Node: Implementation Limitations1402451 +Node: Extension Design1403693 +Node: Old Extension Problems1404857 +Ref: Old Extension Problems-Footnote-11406433 +Node: Extension New Mechanism Goals1406494 +Ref: Extension New Mechanism Goals-Footnote-11409990 +Node: Extension Other Design Decisions1410191 +Node: Extension Future Growth1412390 +Node: Notes summary1413014 +Node: Basic Concepts1414227 +Node: Basic High Level1414912 +Ref: figure-general-flow1415194 +Ref: figure-process-flow1415901 +Ref: Basic High Level-Footnote-11419302 +Node: Basic Data Typing1419491 +Node: Glossary1422909 +Node: Copying1456031 +Node: GNU Free Documentation License1493792 +Node: Index1519115 End Tag Table diff --git a/doc/gawk.texi b/doc/gawk.texi index 673cfe4b..56748299 100644 --- a/doc/gawk.texi +++ b/doc/gawk.texi @@ -4191,7 +4191,6 @@ sign in the output. @cindex comma separated values (CSV) data @subentry @option{--csv} option @cindex CSV (comma separated values) data @subentry @option{-k} option @cindex CSV (comma separated values) data @subentry @option{--csv} option -@cindex op-codes, trace of internal Enable special processing for files with comma separated values (CSV). @xref{Comma Separated Fields}. This option cannot be used with @option{--posix}. Attempting to do @@ -7889,7 +7888,7 @@ For example, here we set the value of @code{FS} to the string @code{":"}: @example -awk 'BEGIN @{ FS = "," @} ; @{ print $2 @}' +awk 'BEGIN @{ FS = ":" @} ; @{ print $2 @}' @end example @cindex @code{BEGIN} pattern @@ -8147,11 +8146,45 @@ In order to deal with such things, when processing CSV files, are not enclosed in double quotes. Thus, use of the @option{--csv} totally overrides normal record processing with @code{RS} (@pxref{Records}). +@cindex sidebar @subentry Carriage-Return--Line-Feed Line Endings In CSV Files +@ifdocbook +@docbook +<sidebar><title>Carriage-Return--Line-Feed Line Endings In CSV Files</title> +@end docbook + +@quotation +@code{\r\n} @i{is the invention of the devil.} +@author Brian Kernighan +@end quotation + +Many CSV files are imported from systems where the line terminator +for text files is a carriage-return--line-feed pair +(CR-LF, @code{\r} followed by @code{\n}). +For ease of use, when processing CSV files, @command{gawk} simply +strips out any carriage-return characters in the input. + +@docbook +</sidebar> +@end docbook +@end ifdocbook + +@ifnotdocbook +@cartouche +@center @b{Carriage-Return--Line-Feed Line Endings In CSV Files} + + +@quotation +@code{\r\n} @i{is the invention of the devil.} +@author Brian Kernighan +@end quotation + Many CSV files are imported from systems where the line terminator for text files is a carriage-return--line-feed pair (CR-LF, @code{\r} followed by @code{\n}). For ease of use, when processing CSV files, @command{gawk} simply strips out any carriage-return characters in the input. +@end cartouche +@end ifnotdocbook The behavior of the @code{split()} function (not formally discussed yet, see @ref{String Functions}) differs slightly when processing CSV @@ -11922,7 +11955,8 @@ $ @kbd{gawk 'BEGIN @{ print "hello, \} In POSIX mode (@pxref{Options}), @command{gawk} does not allow escaped newlines. Otherwise, it behaves as just described. -BWK @command{awk} and BusyBox @command{awk} +BWK @command{awk}@footnote{In all examples throughout this @value{DOCUMENT}, +@command{nawk} is BWK @command{awk}.} and BusyBox @command{awk} remove the backslash but leave the newline intact, as part of the string: @@ -22235,7 +22269,7 @@ $ @kbd{nawk -v A=1 -f funky.awk} @end example Or @command{awk} could wait until runtime to set the type of @code{a}. -In this case, since @code{a} was never assigned used before being +In this case, since @code{a} was never used before being passed to the function, how the function uses it forces the type to be resolved to either scalar or array. @command{gawk} and the MKS @command{awk} do this: @@ -42381,7 +42415,7 @@ The ability to make @command{gawk} buffer output to pipes @item The @samp{\u} escape sequence -(@pxref{Escape Sequences}) +(@pxref{Escape Sequences}). @item The need for GNU @code{libsigsegv} was removed from @command{gawk}. @@ -42407,10 +42441,12 @@ the three most widely used freely available versions of @command{awk} @headitem Feature @tab BWK @command{awk} @tab @command{mawk} @tab @command{gawk} @tab Now standard @item @code{**} and @code{**=} operators @tab X @tab @tab X @tab @item @samp{\x} escape sequence @tab X @tab X @tab X @tab +@item @samp{\u} escape sequence @tab X @tab @tab X @tab @item @file{/dev/stdin} special file @tab X @tab X @tab X @tab @item @file{/dev/stdout} special file @tab X @tab X @tab X @tab @item @file{/dev/stderr} special file @tab X @tab X @tab X @tab @item @code{BINMODE} variable @tab @tab X @tab X @tab +@item CSV support @tab X @tab @tab X @tab @item @code{FS} as null string @tab X @tab X @tab X @tab @item @code{delete} without subscript @tab X @tab X @tab X @tab X @item @code{fflush()} function @tab X @tab X @tab X @tab X diff --git a/doc/gawktexi.in b/doc/gawktexi.in index 7eb91428..28359633 100644 --- a/doc/gawktexi.in +++ b/doc/gawktexi.in @@ -4097,7 +4097,6 @@ sign in the output. @cindex comma separated values (CSV) data @subentry @option{--csv} option @cindex CSV (comma separated values) data @subentry @option{-k} option @cindex CSV (comma separated values) data @subentry @option{--csv} option -@cindex op-codes, trace of internal Enable special processing for files with comma separated values (CSV). @xref{Comma Separated Fields}. This option cannot be used with @option{--posix}. Attempting to do @@ -7450,7 +7449,7 @@ For example, here we set the value of @code{FS} to the string @code{":"}: @example -awk 'BEGIN @{ FS = "," @} ; @{ print $2 @}' +awk 'BEGIN @{ FS = ":" @} ; @{ print $2 @}' @end example @cindex @code{BEGIN} pattern @@ -7708,11 +7707,18 @@ In order to deal with such things, when processing CSV files, are not enclosed in double quotes. Thus, use of the @option{--csv} totally overrides normal record processing with @code{RS} (@pxref{Records}). +@sidebar Carriage-Return--Line-Feed Line Endings In CSV Files +@quotation +@code{\r\n} @i{is the invention of the devil.} +@author Brian Kernighan +@end quotation + Many CSV files are imported from systems where the line terminator for text files is a carriage-return--line-feed pair (CR-LF, @code{\r} followed by @code{\n}). For ease of use, when processing CSV files, @command{gawk} simply strips out any carriage-return characters in the input. +@end sidebar The behavior of the @code{split()} function (not formally discussed yet, see @ref{String Functions}) differs slightly when processing CSV @@ -11346,7 +11352,8 @@ $ @kbd{gawk 'BEGIN @{ print "hello, \} In POSIX mode (@pxref{Options}), @command{gawk} does not allow escaped newlines. Otherwise, it behaves as just described. -BWK @command{awk} and BusyBox @command{awk} +BWK @command{awk}@footnote{In all examples throughout this @value{DOCUMENT}, +@command{nawk} is BWK @command{awk}.} and BusyBox @command{awk} remove the backslash but leave the newline intact, as part of the string: @@ -21216,7 +21223,7 @@ $ @kbd{nawk -v A=1 -f funky.awk} @end example Or @command{awk} could wait until runtime to set the type of @code{a}. -In this case, since @code{a} was never assigned used before being +In this case, since @code{a} was never used before being passed to the function, how the function uses it forces the type to be resolved to either scalar or array. @command{gawk} and the MKS @command{awk} do this: @@ -41293,7 +41300,7 @@ The ability to make @command{gawk} buffer output to pipes @item The @samp{\u} escape sequence -(@pxref{Escape Sequences}) +(@pxref{Escape Sequences}). @item The need for GNU @code{libsigsegv} was removed from @command{gawk}. @@ -41319,10 +41326,12 @@ the three most widely used freely available versions of @command{awk} @headitem Feature @tab BWK @command{awk} @tab @command{mawk} @tab @command{gawk} @tab Now standard @item @code{**} and @code{**=} operators @tab X @tab @tab X @tab @item @samp{\x} escape sequence @tab X @tab X @tab X @tab +@item @samp{\u} escape sequence @tab X @tab @tab X @tab @item @file{/dev/stdin} special file @tab X @tab X @tab X @tab @item @file{/dev/stdout} special file @tab X @tab X @tab X @tab @item @file{/dev/stderr} special file @tab X @tab X @tab X @tab @item @code{BINMODE} variable @tab @tab X @tab X @tab +@item CSV support @tab X @tab @tab X @tab @item @code{FS} as null string @tab X @tab X @tab X @tab @item @code{delete} without subscript @tab X @tab X @tab X @tab X @item @code{fflush()} function @tab X @tab X @tab X @tab X |