【问题标题】:Extracting certain data from data separated by tabs从制表符分隔的数据中提取某些数据
【发布时间】:2016-05-21 07:57:41
【问题描述】:
256-56-8411  Bob      3.61  junior     cs
471-44-7458  Tim      3.45  senior     ce
326-56-4286  Rajesh   2.97  freshman   te
548-66-1124  Eric     2.88  sophomore  ee
447-21-3599  John     2.51  junior     cs
911-41-1256  Rebecca  3.92  senior     cs
854-22-6372  Robin    2.45  freshman   te

此数据由制表符分隔。我需要编写一个 shell 命令,它只显示 ID 不以“4”开头的学生。

【问题讨论】:

  • 我相信你会的。您的问题尽可能不具体,最重要的是,您没有表现出任何努力。您应该先解决这些问题,然后在遇到实际编码问题时回来询问。我们很乐意为此提供帮助。
  • 我会用 sed 试试。
  • 为什么要使用shell?使用像 php 这样的脚本语言将使这更容易和更透明。
  • grep '^[^4]',打败它,sed! sed -n '/^[^4]/p'...呃!
  • sed '/^4/d' 工作得很好,sed /^4/d

标签: shell unix sh


【解决方案1】:

在这种情况下,“ID 不以 4 开头”与“行不以 4 开头”相同。

你可以

  1. 编写一个 shell 脚本循环遍历你的行并显示那些不以“4”开头的行:

    #!/bin/bash
    
    while read line; do
        if [[ $line != 4* ]]; then
            echo "$line"
        fi
    done < "$1"
    
  2. 使用 Perl 单行打印不以“4”开头的行:

    perl -ne 'print if /^[^4]/' infile
    
  3. 使用 awk one-liner 做同样的事情:

    awk '/^[^4]/' infile
    
  4. 使用 sed 单行打印确实以“4”开头的行:

    sed '/^4/d' infile
    
  5. 排除以“4”开头的行来查找行:

    grep -v '^4' infile
    

【讨论】:

    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 2021-12-21
    相关资源
    最近更新 更多