awk/sed:将行号添加到一定范围内的文本

awk/sed:将行号添加到一定范围内的文本

所以我有一个范围,比如说2-4。我有三行:

first
second
third

我需要我的输出是:

2 first
3 second
4 third

我正在 BSD (Mac) awk/sed 上尝试这个,这似乎使它变得更难。

答案1

nl非常适合:

nl -v2 -p -ba

将从 2 ( -v2) 开始计数,忽略页面更改 ( -p) 并对所有行进行编号 ( -ba)。

答案2

正面:

awk '{printf("%s %s\n", FNR+1, $0)}' file

如果要传递参数:

awk -vn=2 '{printf "%s %s\n", n++, $0}' <file

如果您只想生成范围以防文件长于范围:

awk -v s=2 -v e=4 'BEGIN{for(n=s;n<=e;n++)print n}' | paste -d' ' - file

答案3

用纯 bash 脚本?

i=2; cat output.txt | while IFS= read -r line; do
    echo "$i $line"
    i=$((i+1))
done

相关内容