╔══════════╦═══════════════════╦═════════════════════════════════════════╗
║ awk ║ ruby ║ comment ║
╠══════════╬═══════════════════╬═════════════════════════════════════════╣
║ $0 ║ $_ ║ unsplit record (line usually) ║
║ NF ║ $F.length ║ Number of fields from autosplit ║
║ FNR ║ ARGF.file.lineno ║ Number records read from current source ║
║ NR ║ ARGF.lineno or $. ║ Total number of records so far ║
║ (magic) ║ ARGF or $< ║ stream from either STDIN or a file ║
║ $1..$NF ║ $F[0]..$F[-1] ║ First to last field from autosplit ║
║ FS ║ $; ║ Input field separator ║
║ RS ║ $/ ║ Input record separator ║
║ FILENAME ║ $<.file.path ║ Filename of file being processed ║
╚══════════╩═══════════════════╩═════════════════════════════════════════╝
1条答案
按热度按时间50few1ms1#
给定:
Ruby有一个ARGF stream(如果你想体验一下Perly,可以别名为
$<
),它可以读取STDIN或者从命令行打开一个文件,行为与awk
相同:如果你想同时读取
STDIN
和一个文件,你可以使用-
作为文件占位符:更多对应变量:
因此,如果您在
f1
中有一个行号列表,并且您希望使用这些行号索引一个文本文件(您可以使用awk
或sed
来完成此操作),则可以使用Ruby。给定:
在
awk
中,您可以执行以下操作:在Ruby中,您可以执行以下操作:
两者均打印:
这个例子的awk版本大约快5倍(go awk),但是Ruby版本可以轻松支持awk无法支持的输入,比如JSON、XML、复杂的csv等等