关于awk的用法 。。

sh/bash/dash/ksh/zsh等Shell脚本
回复
悬崖勒马2011
帖子: 91
注册时间: 2013-01-23 14:27
系统: ubuntu 12.04

关于awk的用法 。。

#1

帖子 悬崖勒马2011 » 2014-01-02 13:43

各位大神,有一个问题我始终搞不懂:

我有一个文本文件data.cat:
1 348.840969 -41.107056
2 348.802748 -41.954959
3 348.747167 -43.298839
4 348.776328 -41.787413
5 348.739272 -42.733288
6 348.706704 -43.725525
7 348.717778 -43.210221
8 348.761941 -41.691888
10 348.737033 -42.304654

想把每一行的内容都单独写到该行首个数字命名的文件中: 例如 第三行 写到 3.txt中
写了个循环脚本:

for (( i=1 ; i<=10 ; i=i+1 ))
do
cat data.cat | awk 'NR==i { print $1 "\t" $2 "\t" $3 > "$i.txt" }'
done

但是根本就没有东西写入!请各位看看问题出在哪儿 ?
sk1418
帖子: 229
注册时间: 2007-07-01 17:36
系统: (En):System
来自: (En):address
联系:

Re: 关于awk的用法 。。

#2

帖子 sk1418 » 2014-01-02 16:52

以下假设第一列内容没有重复
如果行不多:

代码: 全选

awk '{print > $1".txt"}' data.txt
如果行很多:

代码: 全选

awk '{print >> $1".txt"; close($1".txt")}' data.txt
上两条命令都是dry coding,没测试。但应该没问题

你的问题:请参考
1, cat多余
2, awk自己分内的事,不用for啊什么的,反而添乱。你这样每行就起两个进程
3, 输出是空,因为你把$1放引号里了。
4, 即使你改对了,如果行数特多,你会收到too many files opened 这类似的错误。
---
regards,

Kent
悬崖勒马2011
帖子: 91
注册时间: 2013-01-23 14:27
系统: ubuntu 12.04

Re: 关于awk的用法 。。

#3

帖子 悬崖勒马2011 » 2014-01-11 9:52

sk1418 写了:以下假设第一列内容没有重复
如果行不多:

代码: 全选

awk '{print > $1".txt"}' data.txt
如果行很多:

代码: 全选

awk '{print >> $1".txt"; close($1".txt")}' data.txt
上两条命令都是dry coding,没测试。但应该没问题

你的问题:请参考
1, cat多余
2, awk自己分内的事,不用for啊什么的,反而添乱。你这样每行就起两个进程
3, 输出是空,因为你把$1放引号里了。
4, 即使你改对了,如果行数特多,你会收到too many files opened 这类似的错误。
多谢
悬崖勒马2011
帖子: 91
注册时间: 2013-01-23 14:27
系统: ubuntu 12.04

Re: 关于awk的用法 。。

#4

帖子 悬崖勒马2011 » 2014-01-11 9:54

sk1418 写了:以下假设第一列内容没有重复
如果行不多:

代码: 全选

awk '{print > $1".txt"}' data.txt
如果行很多:

代码: 全选

awk '{print >> $1".txt"; close($1".txt")}' data.txt
上两条命令都是dry coding,没测试。但应该没问题

你的问题:请参考
1, cat多余
2, awk自己分内的事,不用for啊什么的,反而添乱。你这样每行就起两个进程
3, 输出是空,因为你把$1放引号里了。
4, 即使你改对了,如果行数特多,你会收到too many files opened 这类似的错误。
谢谢了 !
回复