我需要读取文件(包含 16K 行)并打印整行,如果任何列和所有列包含最大值(100)并且所有列包含最小值(0)。给出了输出示例
input.txt(制表符分隔)
Id sno1 sno2 sno3 sno4
E1 98 100 88 78
E2 33 99 78 66
E3 0 0 100 56
E4 0 0 0 0
E5 45 55 65 100
E6 0 0 99 88
E7 100 100 100 100
输出.txt
E1 98 100 88 78
E3 0 0 100 56
E4 0 0 0 0
E5 45 55 65 100
E7 100 100 100 100
答案1
像这样的东西[更新]?
perl -n -e 'if (/^\S+\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/) { print if $1==100||$2==100||$3==100||$4==100||($1==0&&$2==0&&$3==0&&$4==0) }' input.txt
也适用于空间分隔的列。
答案2
也可以在以下位置完成awk
:
awk '$2 ~ /^0$/ && $3 ~ /^0$/ && $4 ~ /^0$/ && $5 ~ /^0$/ || /100/' $file