问题描述:
有如下图格式的文件,其中内容是AND门,每一行的列数不同,代表不同的输入数,即AND2,AND3等,第一列是AND门的输出,我想将同一类型即列数相同的行提取出来,输出到一个新的文件中。
思路如下:
假如某一行有4列内容,那么这一行的第四列非空,而第五列一定是空的。
某一列是否为空可以转化为求字符串的长度问题,如果这一列非空,那么长度大于等于1,否则长度为0。
代码:
#############################
# AND > AND4 #提取4输入AND门
##############################
awk '{if(length($5)>1 && length($6) == 0) print NR}' AND > loc #打印第5列非空而第6列为空的行号
loc=($(awk '{print $1}' loc))
num=${#loc[@]}
cat /dev/null>AND4
for ((i=0;i<$num;i++))
do
sed -n "${loc[$i]}p" AND >> AND4 #筛选非空的行
done
##### 按照新的格式输出
ANDo=($(awk '{print $1}' AND4))
ANDi1=($(awk '{print $2}' AND4))
ANDi2=($(awk '{print $3}' AND4))
ANDi3=($(awk '{print $4}' AND4))
ANDi4=($(awk '{print $5}' AND4))
num=${#ANDo[@]}
cat /dev/null>AND4.txt
for ((i=0;i<$num;i++))
do
str0=${ANDo[$i]}
str1=${ANDi1[$i]}
str2=${ANDi2[$i]}
str3=${ANDi3[$i]}
str4=${ANDi4[$i]}
echo "AND4V1_V50 AND4_$i($str0,$str1,$str2,$str3,$str4);" >> AND4.txt
done