【问题标题】:how to print out the data at the certain line using bash script?如何使用bash脚本打印出某一行的数据?
【发布时间】:2012-03-12 14:02:42
【问题描述】:

我有一个 100k 行的 txt 文件。如果我想知道第 #24356 行的数据是什么样的,我该如何在命令行中做到这一点?

【问题讨论】:

    标签: file bash


    【解决方案1】:

    您可以使用awk 获取特定行:

    awk 'NR==24356{print;exit}' input_file
    

    只要记录号NR 是您想要的,它将打印该行并退出,否则它将什么也不做。 exit 是为了确保您不会在感兴趣的行之后不必要地处理行。

    例如,请参阅以下记录:

    pax> cat qq.sh
    while read line
    do
        echo "Reading within the loop: [$line]"
        echo -n "What do you want to say? "
        read -u 3 something
        echo "You input: [$something]"
    done 3<&0 <qq.sh
    
    pax> awk 'NR==2{print;exit}' qq.sh
    do
    
    pax> awk 'NR==3{print;exit}' qq.sh
        echo "Reading within the loop: [$line]"
    

    【讨论】:

    • 只有在您提供的条件为真时才会发生默认打印。这足够了:awk 'NR==24356' file
    • 到达您想要的线路后无需阅读。 awk 'NR==24356{print;exit}'
    • 两个优点,伙计们。我已将它们纳入答案。
    【解决方案2】:

    sed 可以打印指定的行范围,所以在这种情况下它将是sed -n 24356,24356p $FILE

    【讨论】:

    • 又一个不错的。请记住,对于 single 行,您只需执行 sed -n 24356p input_file.
    • 一旦你到达终点线,继续阅读就没有意义了! sed '24356!d;q'
    【解决方案3】:

    试试这个:

    cat filename | head -24356 | tail -1
    

    使用的命令应该在每个 *nix 系统上都可用

    【讨论】:

    • 或者为自己保存一个进程并使用head -23456 filename | tail -1,尽管我不得不承认我也会经常使用cat 启动管道,因为它比记住哪些命令可以采用文件名以及哪些命令更容易想要标准输入:-)
    猜你喜欢
    • 1970-01-01
    • 2017-10-02
    • 2012-06-27
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2013-05-06
    • 2013-12-08
    • 2021-01-11
    相关资源
    最近更新 更多