首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awk无法读取大文件的内容

awk无法读取大文件的内容
EN

Stack Overflow用户
提问于 2013-08-11 14:43:41
回答 1查看 615关注 0票数 1

我对awk相当陌生,我正在编写一个脚本来读取文件的内容,然后根据结果将结果附加到几个文件中。该脚本在包含大约100行的文件上工作,但对于包含125 k行的文件则失败。我对我在这里做事情的方式是否有问题感到困惑,因为我已经看到awk可以很好地处理更大的文件。

这是我的代码: FileSplitting.awk

代码语言:javascript
复制
BEGIN { print "Splitting file ";} { print NR; r=int($2/1024); if(r>5){ print $0 >> "testFile";} if(r<=5){ print $0 >> "testFile2";} } END { print "Done"; }

我引用的脚本如下:

代码语言:javascript
复制
awk -F"," -f FileSplitting.awk test.csv
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-11 15:47:57

问题是您使用了错误的输出重定向操作符。您应该使用>而不是>>。Awk的行为与shell wrt不同,这两个操作符。使用man了解这些操作符在awk中的工作方式,并将脚本更改为:

代码语言:javascript
复制
BEGIN { print "Splitting file ";} { print NR; r=int($2/1024); if(r>5){ print $0 > "testFile";} if(r<=5){ print $0 > "testFile2";} } END { print "Done"; }

让它开始工作,然后把它清理到:

代码语言:javascript
复制
BEGIN { print "Splitting file " }
{ print NR; print > ("testFile" (int($2/1024)>5?"":"2")) }
END { print "Done" }

您不需要在每次写入之后关闭这些文件。

对于@Aryan在下面的评论,下面是>>> awk与shell对应的内容:

1)锥>

代码语言:javascript
复制
awk:
    { print > "foo" }

shell equivalent:

    > foo
    while IFS= read -r var
    do
        printf "%s\n" "$var" >> foo
    done

2)锥>>

代码语言:javascript
复制
awk:
    { print >> "foo" }

shell equivalent:

    while IFS= read -r var
    do
        printf "%s\n" "$var" >> foo
    done
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18173118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档