Awk 在字符串后拆分文件
我在aix中有一个文件,我想在以下字符串后拆分该文件: “快照时间戳=11/25/2014 16:00:00” 我尝试使用下面的命令,但是由于字符串中的空格,我得到了错误Awk 在字符串后拆分文件,awk,Awk,我在aix中有一个文件,我想在以下字符串后拆分该文件: “快照时间戳=11/25/2014 16:00:00” 我尝试使用下面的命令,但是由于字符串中的空格,我得到了错误 awk '/YOUR_TEXT_HERE/{n++}{print >"out" n ".txt" }' final.txt 如果我能得到一个语法,将数据“放在”字符串之前,这也会很有帮助。问题不在于空格,而在于“/” 您是否保护了日期中的“/”号 (/...11\/25\/2014.../) (这对我来说很有效) 正
awk '/YOUR_TEXT_HERE/{n++}{print >"out" n ".txt" }' final.txt
如果我能得到一个语法,将数据“放在”字符串之前,这也会很有帮助。问题不在于空格,而在于“/” 您是否保护了日期中的“/”号
(/...11\/25\/2014.../)
(这对我来说很有效)
正如@Etan Reisner所指出的
awk '$0 == "Snap..." {n++; next } {print >"out" n ".txt" }' final.txt
是一个更好的解决方案(您不必保护regex操作符)。“next”指令将从输出文件中“删除”时间戳
如果您计划将来再次这样做,我建议您使用awk Script:
#!/usr/bin/gawk -f
BEGIN { n =1 }
/Snapshot timestamp = / { n++; next }
{ print >"out" n ".txt" }
用法
awk -f awkscript final.txt
或
如果将该字符串中的空格直接插入到该awk命令中(代替此处的
YOUR_TEXT
),则不会造成任何问题,但斜杠会。你需要逃离他们。也就是说,如果这是一个文本字符串,而这是整行,我将使用$0==“YOUR_TEXT_HERE”
。你说的“在…之后分割”是什么意思?显示示例输入和预期输出。@EtanReisner感谢您的回复。也许是我接到了一个错误的命令,因此造成了混乱。“after”我的意思如下:原始文件A B c D快照时间戳=11/25/2014 16:00:00 E F G“after”应该给我文件:A B c D我同意在文件中包括/排除“快照”字符串,具体取决于打印当前行,然后更改为新文件或更改为创建一个新文件,然后打印该行。您只想在n++
中更改它。谢谢:(反斜杠被维基隐藏了)。我会改进答案。
awk -f awkscript final.txt
awkscript final.txt (after chmod...)