我想比较连续行上的不同字段,如:
TYPE DATE TOTAL
p1 xxxx 1
p2 xxxx 2
p3 xxxx 1
p3 xxxx 2
p3 xxxx 1
p4 xxxx 2
p5 xxxx 1
p5 xxxx 2
p5 xxxx 1
我想要一个最初会调查" Totals"对于= 1的条目,它将查看列类型,只要P与遇到1的条目保持相同,就需要将其输出到文件中。
示例结果:
p1 xxxx 1
p3 xxxx 1
p3 xxxx 2
p3 xxxx 1
p5 xxxx 1
p5 xxxx 2
p5 xxxx 1
我尝试使用bash,但代码是SUPER SLOW,还有其他方法吗?
temp=AAAAA
读取行时做 键入= $ {线:20:1} 荚= $ {行:0:2} 日期= $ {线:9:5}
if [ "$type" != "2" ]
then
echo $line >> outfile
fi
if [ "$POD" == "temp" ]
then
echo line >> outfile
fi
temp=POD
done<$1
答案 0 :(得分:2)
$ awk '$NF==1{t=$1} $1==t' file
p1 xxxx 1
p3 xxxx 1
p3 xxxx 2
p3 xxxx 1
p5 xxxx 1
p5 xxxx 2
p5 xxxx 1
上述内容将在眨眼之间运行,并且可以在所有问题中稳健运行。
说一个bash脚本对于操作文本来说很慢就像说你的自行车很慢,让你30英里上班。当然它很慢,它不是它的设计目的。 shell用于操作文件和进程以及对工具进行排序,而不是用于操作文本。用于操作文本的UNIX工具是awk - 这就是你应该使用的东西。获得Arnold Robbins的第四版Effective Awk编程一书。
答案 1 :(得分:0)
@echo OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
set "_zeroThroughNine=set /a _number=^!Random^! %% 10 & echo NUMBER=^!_number^!"
echo check variables
set _
echo output
%_zeroThroughNine%
for /L %%G in (1,1,10) do %_zeroThroughNine%
echo check variables after evaluating
set _
ENDLOCAL
最好的我管理得如此肥胖,但却非常痛苦。我认为每次旋转4个ifs:/
答案 2 :(得分:-1)
awk '{if($3==1){a=$1}if($1==a){print}}' your_file