我有一个带行的文件:名称,空格和字符串零和一,我需要提取零和一的字符串的每个第5个字符,得到结果的总和,如果总和不是0 - 将名称保存到另一个文件中。
1rt2 0001000000100000000000001010000100000000010000001000000100010010000000000000
1gh4 0001000000100000000000001010000100000000010000001000000100000010000000000000
3fg5 1000000100010010000000000000100000010000000001000000100000010000000000000000
45gh 1000000100000010000000000000100000010000000001000000000100010000000000000000
问题:如何提取bittring的每第5个数字(字母)?解决方案越简单 - 越好......
提前多多谢谢!
答案 0 :(得分:1)
sed -e '/ \(.........\)*........1/s/^\([^ ]*\) .*$/\1/;t;d'
匹配位数为9的倍数为1的行(对于这些行,总和不会为0)并打印该行的文件名部分。所有其他行都不会打印出来。
sed -e '/ \(.....\)*....1/s/^\([^ ]*\) .*$/\1/;t;d'
每隔5 0或1完成一次工作。
答案 1 :(得分:0)
尝试....(.)
。
....
匹配四个任意字母(.)
匹配第五个字母并将其捕获。我不确定sed / awk regexp语法,所以你可能不得不逃避parens。
答案 2 :(得分:0)
从stdin读取:
#!/bin/bash
while read name bits; do
(($(sed 's/....(.)/$1/g' <<< "$bits") > 0)) && echo "$name"
done
读取每一行,使用sed提取每五位,然后将该数字与((num > 0))
进行比较。阅读&&
,如果 - 那么:如果数字大于零,则回显名称。
答案 3 :(得分:0)
awk '{
name=$1
m=split($2,n,"")
for(o=1;o<=m;o+=4){
total+=n[o]
}
if(total>0){
print name > "file"
}
}' file