1 | blah | 2 | 1993 | 86 | 0 | NA | 123 | 123
1 | blah | TheBeatles | 0 | 3058 | NA | NA | 11
我想只获得7 "|"
和第一个字段相同的行。
所以这两行的输出都没有,但对于这两行:
1 | blah | 2 | 1993 | 86 | 0 | NA | 123
1 | blah | TheBeatles | 0 | 3058 | NA | NA | 11
输出将是“错误”。
我使用以下命令从文件中获取输入:
grep '.*|.*|.*|.*|.*|.*|.*|.*' < $1 | sort -nbsk1 | cut -d "|" -f1 | uniq -d |
while read line2; do
echo error
done
但即使我有超过7“|”,这个实现仍然会打印错误。
有什么建议 ?
P.S - 我可以假设每行末尾有一个\ n。
答案 0 :(得分:2)
对于仅包含7 |
的打印行,请尝试:
awk -F'|' 'NF == 8' filename
如果您想使用bash计算给定行中|
的数量,请尝试:
line="1 | blah | 2 | 1993 | 86 | 0 | NA | 123 | 123";
count=${line//[^|]/};
echo ${#count};
答案 1 :(得分:1)
假设zz.txt
是:
$ cat zz.txt
1 | blah | 2 | 1993 | 86 | 0 | NA | 123 | 123
1 | blah | TheBeatles | 0 | 3058 | NA | NA | 11
$ cut -d\| -f1-8 zz.txt
以上cut
将为您提供所需的输出。
答案 2 :(得分:1)
使用grep
grep '^\([^|]*|[^|]*\)\{7\}$'
答案 3 :(得分:0)
我建议您使用awk来完成这项工作。
BEGIN { FS = "|" }
NF == 8 && $1 == '1' { print $0}
会完成这项工作(虽然==和&amp;&amp;可能是=和&amp ;;我的awk有点生锈)