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"后面跟的列数。

  • 相关阅读:
    POJ 1003 解题报告
    POJ 1004 解题报告
    POJ-1002 解题报告
    vi--文本编辑常用快捷键之光标移动
    常用图表工具
    September 05th 2017 Week 36th Tuesday
    September 04th 2017 Week 36th Monday
    September 03rd 2017 Week 36th Sunday
    September 02nd 2017 Week 35th Saturday
    September 01st 2017 Week 35th Friday
  • 原文地址:https://www.cnblogs.com/lzp666/p/6568383.html
Copyright © 2011-2022 走看看