是否可以将命令的输出添加到linux中的文本文件(而不是覆盖文本文件)?

时间:2012-01-26 15:16:38

标签: linux awk

我有一个这样的命令行:

awk  '$9 < 0.1' s_all_frq.txt | wc -l  
awk  '$9 >= 0.1 && $9 < 0.2 ' s_all_frq.txt | wc -l

当我运行它时,我得到这样的输出。

$ awk  '$9 < 0.1' s_all_frq.txt | wc -l  
63278
$awk  '$9 >= 0.1 && $9 < 0.2 ' s_all_frq.txt | wc -l  
2346

当我尝试将其保存在文本文件中时,它总是替换第一个输出。所以我使用这些命令:

awk  '$9 < 0.1' s_all_frq.txt | wc -l > 1.txt 

awk  '$9 >= 0.1 &&$9 < 0.2 ' s_all_frq.txt | wc -l > 1.txt

我只在文本文件中保存2346。我认为文件被覆盖了。我想知道是否可以在此命令中添加一些内容以将输出保存为文件中的新行,因此我将在最终文件中添加此内容:

63278
2346

4 个答案:

答案 0 :(得分:6)

使用>>代替>来代替替换。

awk '$9 >= 0.1 &&$9 < 0.2 ' s_all_frq.txt | wc -l >> 1.txt

其他例子:

user@home:~$ echo A >1.txt
user@home:~$ echo B >1.txt
user@home:~$ cat 1.txt
B
user@home:~$ echo C >>1.txt
user@home:~$ cat 1.txt
B
C
user@home:~$

答案 1 :(得分:4)

使用>>代替>,例如

awk '$9 < 0.1' s_all_frq.txt | wc -l >> 1.txt

awk '$9 >= 0.1 &&$9 < 0.2 ' s_all_frq.txt | wc -l >> 1.txt

这会将输出附加到文件中。

答案 2 :(得分:1)

如何在awk内完成所有操作。

awk '$9 >= 0.1 && $9 < 0.2 {print | "wc -l > 1.txt"}' s_all_frq.txt

manual

引用
  

print items > output-file

     

此重定向将项目打印到名为output-file的输出文件中。文件名输出文件可以是任何表达式。它的值更改为字符串,然后用作文件名   使用此类重定向时,输出文件将在写入第一个输出之前被擦除。 对同一输出文件的后续写入不会删除输出文件,而是附加到它。 (这与在shell脚本中使用重定向的方式不同。)如果output-file不存在,则创建它。

     

例如,以下是awk程序如何将BBS名称列表写入名为name-list的文件,以及将电话号码列表写入另一个名为phone-list的文件:

      $ awk '{ print $2 > "phone-list"
      >        print $1 > "name-list" }' BBS-list
      $ cat phone-list
      -| 555-5553
      -| 555-3412
      ...
      $ cat name-list
      -| aardvark
      -| alpo-net
      ...
  

每个输出文件每行包含一个名称或编号。

实施例

[jaypal:~/Temp] cat file.txt
1
2
3
4
5
6
7
8
9
10
[jaypal:~/Temp] awk '/1/{print "this is one" > "newfile.txt"}' file.txt
[jaypal:~/Temp] cat newfile.txt 
this is one
this is one

答案 3 :(得分:0)

没有'wc'的awk进程应该可以正常工作

awk '$9<0.1{i++;next;} $9<0.2{j++} END{print i;print j}' s_all_frq.txt

未经过测试