cjcmay 发表于 2018-8-21 10:17:20

shell 字符串出现的行数

  示例:
  str.txt
  xxx
  yyy
  zzz
  xxx
  输入查找命令: grep-n"xxx"   str.txt
  结果如下:
  1:xxx
  4:xxx
  行号1,4在前,匹配字符串“xxx”在后,两者之间用冒号 “:” 隔开
  2 查找字符串首次匹配的行号
  grep-n"xxx"   str.txt| head -1
  结果如下:
  1:xxx
  同理,查找最后一次匹配的行号
  grep-n"xxx"   str.txt| tail -1
  结果如下:
  4:xxx
  查找字符串第二次匹配的行号
  grep-n"xxx"   str.txt| head -2 | tail -1            # 先取出前两行,然后取最后一行
  结果如下:
  4:xxx
  3 提取字符串所在的行号
  grep-n"xxx"   str.txt| cut-d":"-f1
  先查询字符串 “xxx” 所在的全部行号,然后利用 cut 命令分割“:”字符,提取第一个字段,即行号
  结果如下:
  1
  4
  提取首次匹配的行号
  grep-n"xxx"   str.txt| head -1 | cut-d":"-f1
  结果如下:
  1
  4 比较两次字符串行号变化幅度
  两个文件内容: str.txt 和 str2.txt
  str.txt
  xxx
  yyy
  zzz
  xxx
  str2.txt
  yyy
  xxx
  www
  zzz
  比较行号脚本
  catline.sh
view plaincopyprint?http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf
[*]  #!/bin/bash
[*]
[*]  rm -rf ret.txt
[*]
[*]  total=`wc -l $1 | awk '{print $1}'`
[*]  echo "total = $total"
[*]
[*]  num=1
[*]  while read line
[*]  do
[*]  echo $line
[*]
[*]  ret=`grep -n $line $2 | head -1`
[*]  echo $ret
[*]
[*]  if [ -z $ret ]; then
[*]  num2=$total
[*]  echo "null num2 = $total"
[*]  else
[*]  num2=`echo $ret | cut -d ":" -f 1`
[*]  echo "num2 = $num2"
[*]  fi
[*]
[*]  echo $num
[*]  change=`expr $num2 - $num`
[*]  echo "$num2 - $num = $change"
[*]
[*]  num=`expr $num + 1`
[*]
[*]  echo "$line=$change" >> ret.txt
[*]  done < $1
[*]
[*]
[*]  cat ret.txt
  执行脚本命令:
  ./catline.sh    str2.txt   str.txt
  
  运行结果如下:
view plaincopyprint?http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf
[*]  total = 4
[*]  yyy
[*]  2:yyy
[*]  num2 = 2
[*]  1
[*]  2 - 1 = 1
[*]  xxx
[*]  1:xxx
[*]  num2 = 1
[*]  2
[*]  1 - 2 = -1
[*]  www
[*]
[*]  null num2 = 4
[*]  3
[*]  4 - 3 = 1
[*]  zzz
[*]  3:zzz
[*]  num2 = 3
[*]  4
[*]  3 - 4 = -1
[*]  yyy=1
[*]  xxx=-1
[*]  www=1
[*]  zzz=-1

页: [1]
查看完整版本: shell 字符串出现的行数