2010-03-17 175 views
1

我需要将awk打印的内容移动到文本文件的帮助。 这是previous quesion 的延续我必须将所有内容移动到同一文件中,以便追加。将awk输出到文件

具体地说

nawk -v file="$FILE" 'BEGIN{RS=";"} 
    /select/{ gsub(/.*select/,"select");gsub(/\n+/,"");print file,$0;} 
    /update/{ gsub(/.*update/,"update");gsub(/\n+/,"");print file,$0;} 
    /insert/{ gsub(/.*insert/,"insert");gsub(/\n+/,"");print file,$0;} 
    ' "$FILE" 

如何获得的打印结果到一个文本文件中附加一个接一个地在同一个文件后?

回答

4

当使用shell时,I/O重定向是非常基本的。如果要附加行,请使用>>。例如:

nawk -v file="$FILE" 'BEGIN{RS=";"} 
    /select/{ gsub(/.*select/,"select");gsub(/\n+/,"");print file,$0;} 
    /update/{ gsub(/.*update/,"update");gsub(/\n+/,"");print file,$0;} 
    /insert/{ gsub(/.*insert/,"insert");gsub(/\n+/,"");print file,$0;} 
    ' "$FILE" >> newfile 

如果你还没有,请花时间阅读一下shell脚本。

+0

雅非常感谢 – Harish 2010-03-17 10:52:12

3

对不起,awk buff不是很多,但不应该为你处理shell吗?

awk YOUR_AWK_STUFF_HERE >> appended.file.name 
2

其他答案建议shell重定向。实际上,awk允许重定向作为print语句的一部分。

nawk -v file="$FILE" 'BEGIN{RS=";"} 
     /select/{ gsub(/.*select/,"select");gsub(/\n+/,"");print file,$0 >> results.txt;} 
     /update/{ gsub(/.*update/,"update");gsub(/\n+/,"");print file,$0 >> results.txt;} 
     /insert/{ gsub(/.*insert/,"insert");gsub(/\n+/,"");print file,$0 >> results.txt;} 
     ' "$FILE" 

awk man page

print语句打印其 参数上一个文件的标准输出(或 如果>文件或文件>>是 存在或在管道上,如果| cmd为 ),由当前的 输出字段分隔符分隔,并由输出记录分隔符终止 。文件 和cmd可以是文字名称或 括号表达式;相同的 不同语句中的字符串值 表示相同的打开文件。