【问题标题】:How to loop through file and echo each line with line number如何遍历文件并用行号回显每一行
【发布时间】:2014-04-06 14:48:03
【问题描述】:

如何在 bash 中遍历文件并回显行号和行号?

我有这个,除了行号之外什么都有:

while read p;
do
echo "$p" "$LINE";
done < file.txt

感谢您的帮助!

edit这将使用 xargs 多线程运行,所以我不想使用计数器。

【问题讨论】:

  • 你的问题不是很清楚。你在用xargs做什么else
  • @nosid 嗯,我不知道。并且认为我是这样一个 POSIX 恶魔,并且应该知道比使用 cat -n 更好。

标签: linux bash unix while-loop


【解决方案1】:

我只会使用cat -n file

但如果你真的想使用 bash 循环:

i=0
while read; do
  printf '%d %s\n' $(( ++i )) "$REPLY"
done < file

更新:我现在更喜欢nl 而不是cat -n,因为前者是标准的。要获得与cat -n 相同的结果,请使用nl -b a "$file"

【讨论】:

  • cat -n 会起作用的!抱歉,我应该提到,我不想使用计数器,因为这将在多个实例上运行,并且每行都需要唯一的计数器
  • @d-_-b 使用nl -b a "$file"——我没有意识到,但是 cat -n 不是 POSIX 并且比nl 没有任何好处。
【解决方案2】:

你可以使用awk:

awk '{print NR,$0}' file.txt

【讨论】:

    【解决方案3】:

    你可以使用awk:

    awk '{print NR "\t" $0}' file.txt
    

    或者您可以在循环中记录行号:

    count=0
    while read line
    do
        ((count+=1))
        printf "%5d:   %s\n" "$count" "$line"
    done
    

    使用printf可以让你格式化数字,所以文件中的行都是对齐的。

    【讨论】:

      【解决方案4】:

      只是为了好玩,bash v4

      mapfile lines < file.txt
      for idx in "${!lines[@]}"; do printf "%5d %s" $((idx+1)) "${lines[idx]}"; done
      

      不要这样做。

      【讨论】:

      • 或者为了更有趣,mapfile -c1 -O1 -C 'printf "%5d %s"' &lt; file.txt。地图文件很奇怪。
      猜你喜欢
      • 2020-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 2020-05-15
      • 2012-03-24
      • 2019-05-12
      • 1970-01-01
      相关资源
      最近更新 更多