【问题标题】:shell script to get first column using while loop使用while循环获取第一列的shell脚本
【发布时间】:2022-01-17 10:07:24
【问题描述】:
9848012341 100 10
9848012342 126 200
9848012343 5 3
9848012344 23 0
9848012345 69 2
9848012346 0 1
9848112341 80 4
9848112342 555 300
9848112343 700 1000
9848112344 350 679
9848112345 270 86
9848112346 9 0
9848112347 1 3

这是名为 file.txt 的文本文件中的数据。 现在我希望使用 while 循环的 shell 脚本仅获取第一列的输出...

#!/bin/bash
while 
read column
do 
echo "$column"
done< file.txt

所以使用它我得到了我的总文本文件输出。但我只想显示文本文件的第一列而我没有得到它。你能帮帮我吗!

【问题讨论】:

    标签: linux shell


    【解决方案1】:

    更好的解决方案是使用cut 或 Awk。

    如果您的文件是用空格分隔的,

    cut -d ' ' -f1 file
    

    awk '{print $1}' file
    

    您的方法的问题是您将所有列读入一个变量。如果您要求,shell 将拆分为多个变量。 (可能还记得-r。)

    while read -r first others; do
        echo "$first"
    done <file
    

    但是与专用工具相比,shell 慢得令人绝望;如果可能的话,你基本上想避免while read。另见while read loop extremely slow compared to cat, why?

    如果您需要更多列,请指定更多变量。同样,shell 在空格(或更一般地在 IFS 的值上)拆分为您指定的多个变量,如果您指定的变量少于列,则在最后一个变量中重新划分列。

    read-r 选项禁用了反斜杠周围的一些讨厌的行为,这些行为基本上没有人喜欢或想要,但这是原始 Bourne shell 中的默认行为,因此保留了向后兼容性。

    【讨论】:

    • 使用 cut 和 awk 我得到了结果。但我想找出使用​​while循环的方法,我从你分享的信息中得到了结果。现在以同样的方式如何使用 while 循环仅获取第二列和第三列的输出?
    • shell 拆分为您指定的多个变量;试试while read -r first second third rest;但一般来说,请避免堆积新的要求。如果您对 shell 完全陌生,不妨在开始提问之前阅读介绍。
    • 我在哪里可以得到这些的介绍......?你能给我推荐一个在线学习的好网站吗?!
    • Stack Overflow bash tag info page 在页面底部附近有指向在线资源的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2017-09-20
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多