【发布时间】:2018-05-03 16:09:17
【问题描述】:
我正在尝试从一个输入文件创建两个文件。输出文件将共享相同的标头信息(取自原始文件),然后我想根据一个值分配后续行。
目前我被卡住了,因为似乎当一行未能通过“if”语句时,我认为它的最后一个值仍然被添加。
我的输入看起来像这样:-
#START STOP INFO
1 100 700 Q=2;S=40;LENGTH=600
2 300 350 Q=5;S=50;LENGTH=50
3 567 601 Q=3;S=2;LENGTH=34
我的代码如下所示:-
awk -v short="" -v long="" 'BEGIN{FS="\t"}{if ($1 !~/#/) {sub(/.*LENGTH=/, ""); sub(/;.*/, ""); if ($NF >= 500 ) { long=$0 }} else { long=$0; short=$0 }}{print long}' test.txt
我的长文件输出如下所示:-
#START STOP INFO
1 100 700 Q=2;S=40;LENGTH=600
1 100 700 Q=2;S=40;LENGTH=600
1 100 700 Q=2;S=40;LENGTH=600
短文件的输出如下所示:-
#START STOP INFO
#START STOP INFO
#START STOP INFO
而我想要“长”应该是这样的:-
#START STOP INFO
1 100 700 Q=2;S=40;LENGTH=600
而“短”是:-
#START STOP INFO
2 300 350 Q=5;S=50;LENGTH=50
3 567 601 Q=3;S=2;LENGTH=34
(即接下来两行的长度值小于 500,因此应该添加到“短”字符串中,但由于某种原因,前一行 - 大于 500 的行被添加了两次)
【问题讨论】:
-
欢迎来到 Stack Overflow!感谢您发布。你能告诉我们输入是什么样的吗?
-
谢谢,实际上已经发布了一段时间 - 它以前总是被证明很有用!我的输入基本上看起来像(虽然我无法显示换行符..每个都应该在一个新行上):-
#LENGTH 600 100 200