Bash 如何在连续行中查找两个字符串,并在shell中以表格形式相应地写入0或1
给定一个文件list.txt:Bash 如何在连续行中查找两个字符串,并在shell中以表格形式相应地写入0或1,bash,shell,awk,sed,Bash,Shell,Awk,Sed,给定一个文件list.txt: 1.inside list.txt 2.Started task: running_temp 3.Finished task: running_temp 4.Started task: walking_temp 5.Finished task: walking_temp 6.Started task: sleeping 我想要一个输出文件,其中必须检查每个开始都应该有一个结束。如果没有完成,则必须报告错误。awk救援 awk -F: '/^Started/ {
1.inside list.txt
2.Started task: running_temp
3.Finished task: running_temp
4.Started task: walking_temp
5.Finished task: walking_temp
6.Started task: sleeping
我想要一个输出文件,其中必须检查每个开始都应该有一个结束。如果没有完成,则必须报告错误。
awk
救援
awk -F: '/^Started/ {a[$2]++}
/^Finished/ {a[$2]--}
END {for(k in a) print a[k],k}' file
0 walking_temp
1 sleeping
0 running_temp
如果您在没有“开始”的情况下“完成”了,您也会得到-1。如果一个
开始的本身之后没有完成的,那么我假设您需要0,否则1
1.inside list.txt
2.Started task: running_temp
3.Finished task: running_temp
4.Started task: walking_temp
5.Finished task: walking_temp
6.Started task: sleeping
7.Anything ...
文件
1.inside list.txt
2.Started task: running_temp
3.Finished task: running_temp
4.Started task: walking_temp
5.Finished task: walking_temp
6.Started task: sleeping
7.Anything ...
请注意,6.Started
没有Finished
perl -nle '$m && print ( /Finished/ ? "$` : 1" : "$` : 0" ); $m = /Started/' file
3. : 1
5. : 1
6. : 0
6.Started
本身之后没有Finished
。预期的输出是什么样子的?你能澄清你的问题吗?