【问题标题】:cut or awk command to print first field of first rowcut 或 awk 命令打印第一行的第一个字段
【发布时间】:2014-04-07 02:33:28
【问题描述】:

我正在尝试打印输出第一行的第一个字段。情况就是这样。我只需要从此输出中打印SUSE

# cat /etc/*release

SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 2

尝试使用cat /etc/*release | awk {'print $1}',但打印每一行的第一个字符串

SUSE
VERSION
PATCHLEVEL

【问题讨论】:

    标签: linux bash unix awk


    【解决方案1】:

    如果要从选定的行捕获输出,请指定 NR

    awk 'NR==1{print $1}' /etc/*release
    

    实现相同目标的另一种(ugly)方法是:

    awk '{print $1; exit}'
    

    从输出中的特定行(例如第 42 行)获取 第一个字符串 的有效方法是:

    awk 'NR==42{print $1; exit}'
    

    【讨论】:

    • @jaypal 我也想过添加一个tac file | awk 'END{print $1}',但后来意识到这可能有点太多了。
    • 虽然这会让你的 ugly 解决方案看起来 非常 比提议的 hideous 解决方案更漂亮!
    • 不是ugly。更好的是,因为在一个大文件上,它会通过找到并停止处理来节省大量时间。
    • @Jotne 我称它为丑陋只是因为NR==1隐式。在答案中添加了另一个示例,可能会更清楚一点。
    • @devnull 我知道,但是 OP 的要求很明确 print the first string of the first row of an output 所以这里 exit 就可以了。
    【解决方案2】:

    使用NR 内置变量指定行号

    awk 'NR==1{print $1}' /etc/*release
    

    【讨论】:

      【解决方案3】:

      试试这个:

      head -1 /etc/*release | awk '{print $1}'
      

      【讨论】:

        【解决方案4】:

        您可以使用head 代替cat

        head -n1 /etc/*release | awk '{print $1}'
        

        【讨论】:

          【解决方案5】:
          sed -n 1p /etc/*release |cut -d " " -f1
          

          如果制表符分隔:

          sed -n 1p /etc/*release |cut -f1
          

          【讨论】:

            【解决方案6】:
            df -h | head -4 | tail -1 | awk '{ print $2 }'
            

            更改数字以根据自己的喜好进行调整。

            或者使用 while 循环,但这可能是一种不好的方法。

            【讨论】:

            • 现在这是一个绝妙的技巧!
            【解决方案7】:

            试试

            sed 'NUMq;d'  /etc/*release | awk {'print $1}'
            

            其中 NUM 是行号

            ex. sed '1q;d'  /etc/*release | awk {'print $1}'
            

            【讨论】:

            • 这将打印整个第一行,而不是 OP 所述的第一字段。
            • 回答 saras che pan thodu laambu che。 Khali sed thi pan kari sakiye - sed -r '1s/([^ ]+) .*/\1/;q' /etc/*release :)
            【解决方案8】:

            awk、sed、管道,太重了

            set `cat /etc/*release`; echo $1
            

            【讨论】:

              【解决方案9】:

              你可以杀死正在运行容器的进程。

              使用此命令可以列出与 docker 容器相关的进程:

              ps -aux | grep $(docker ps -a | grep container-name | awk '{print $1}')
              

              现在您有了要使用 killkill -9 杀死的进程 ID。

              【讨论】:

              • 这个答案与提出的问题有什么关系?
              猜你喜欢
              • 2022-01-05
              • 2022-01-13
              • 2023-03-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-08-16
              • 2013-02-04
              • 1970-01-01
              相关资源
              最近更新 更多