zoukankan      html  css  js  c++  java
  • Linux shell 学习笔记(五)

    题目:给定任意以逗号分隔的文本,请输出去掉第二列之后的结果,例如:

    zero
    file,12,one
    disk,2,two
    kind,300,tree
    
    Dog,4

    输出结果如下:

    zero
    file,one
    disk,two
    kind,tree
    
    Dog

    一看到这个问题,第一时间想到的是awk,遍历每一行,然后把第二个变量去掉之后,再拼接上第三个变量,实现了一下,结果如下:

    ########################
    # Date: 2017-03-10
    # Version:  v1.0 
    # Author:   lizp
    # Usage:  strsplit
    ########################
    if [ -z $1 ]
    then
      echo "input format wrong,eg : strsplit.sh ."
    else
      cat $1 | awk -F ',' '{print $1,$3}' | while read var1 var3
      do
      if [ -n "$var1" ]
      then
        result=$var1
        if [ -n "$var3" ]
        then
          result+=","
          result+=$var3
        fi
      fi
      echo $result
      done
    fi

    结果执行完了,与示例所给的一致,然而,这种方式得到的结果,只会输出前三个变量,后面的变量则不会输出了,所以这样实现是有问题的。

    后来,我换了个思路,为什么要从行的角度去处理这个问题呢,shell中难道没有类似UE中Alt+c的列编辑模式吗?

    经过查询,我发现了cut命令,于是问题一行代码迎刃而解:

    ####################
    # Date: 2017-03-10
    # Version:  v1.0 
    # Author:   lizp_billing
    # Usage:  strsplit
    ####################
    
    #去掉第二列
    cut -f2 --complement -d"," $1

    cut命令可以从列的角度去处理文本,这样一来,这个问题瞬间变得简单了,"f"后面跟要提取的字段,如果有“--complement”则表示提取非N列之外的的数据,此处的N指"f"后面跟的列数。

  • 相关阅读:
    asp.net mvc学习(Vs技巧与Httpcontext)
    微信小程序代码构成
    MetaEditor中MQL使用方法
    lambda表达式中的排序问题
    Python Bs4 回顾
    Python操作Redis及连接方式
    C# for Python(Nugut Iron包)
    Jquery.ajax dataType参数
    Fleck For Web Socket
    visual studio git for coding
  • 原文地址:https://www.cnblogs.com/lzp666/p/6568383.html
Copyright © 2011-2022 走看看