Bash脚本逐个遍历文件的所有行,并计算新行与上一行不同的次数

时间:2019-06-03 13:06:51

标签: bash awk sed

我正在寻找一个脚本/命令来读取一个文件,该文件具有200000行(每行之间都有空格,并且新行与上一行的计数不同),并像这样继续进行到结尾文件。

我在论坛中搜索了类似问题,但找不到能帮助我解决此问题的内容。

样本输入为:

2 3 4 5 
3 100 105 40
2 1005 1002
2 1005 1002
4 100  105 
0 
3 100 105 40
3 100 105 40

输出应为:

5

对此有何建议?

3 个答案:

答案 0 :(得分:3)

我将使用uniq,删除所有重复的连续行,然后使用wc对行进行计数:

uniq input_file | wc -l

您可以try it here

答案 1 :(得分:0)

请求的文字逻辑的所有bash实现:

cnt=0
last=''
while read line
do case "$line" in
   "$last") continue ;;
   *) last="$line"
      (( cnt++ ))    ;;
   esac
done < in
echo "Total: $cnt"

awk中更好的实现:

$: awk 'BEGIN      { last=""; cnt=0; }
        $0 != last { last=$0; cnt++; }
        END        { print cnt;      }' in

答案 2 :(得分:0)

您正在描述uniq | wc -l,但是它将为示例输入提供6。所以也许您想要sort -u | wc -l

$ sort -u test.txt | wc -l
5

更多详细信息

$ sort -u test.txt
0 
2 1005 1002
2 3 4 5 
3 100 105 40
4 100  105 

$ uniq test.txt
2 3 4 5 
3 100 105 40
2 1005 1002
4 100  105 
0 
3 100 105 40

(多余的空行是我的提示的一部分)