我在文本文件中有以下数据:
Name,7/27,7/28,7/29,7/30,7/31,8/1,8/2,8/3,8/4
abc,5,3,8,8,0,0,2,0,11
def,6,7,0,0,0,0,0,2,5
ghi,1,3,5,2,0,0,5,3,6
我需要找出哪个文件(“名称”列即文件名)给出 5 个连续的0
输出。在这个例子中,那就是def
.
答案1
我可能会在 中这样做awk
,使用,
作为分隔符:
$ awk -F, '/,0,0,0,0,0/{print $1}' file
def
然而,这也会捕捉到这样的一行:
mno,6,7,0,0,0,0,0.5
为了避免这种情况,仅当最后一个后面0
跟着 a,
或行尾时才匹配:
awk -F, '/,0,0,0,0,0(,|$)/{print $1}' file
答案2
grep '0,0,0,0,0' file.txt
打印匹配行:def,6,7,0,0,0,0,0,2,5
grep '0,0,0,0,0' file.txt | cut -d, -f1
使用作为分隔符打印第一个字段,
:def
答案3
为了获得所需的输出,我们可以尝试以下命令。
Gnused
$ sed -nE 'G;y/,/\n/;/(\n0){5}\n/P' file
$ awk -F, '/(,0){5}(,|$)/ && $0 =$1""' file
$ grep -oP '^[^,]+(?=.*?(,0){5}(,|$))' file
打开 PC Re 模式的 Grep,我们 ,0
在前瞻中查找连续的五个,这样它就不会包含在 grep 的输出包中。
答案4
sed 可以这样做:
sed -n '/,0,0,0,0,0[,$]/p' file.txt | sed 's/,.*//'