【问题标题】:How to add iterator to each line using awk, sed or grep?如何使用 awk、sed 或 grep 向每一行添加迭代器?
【发布时间】:2015-01-18 20:30:22
【问题描述】:

如何使用 grep、sed 或 awk 将迭代器插入到文件的每一行(行)?

假设我的数据如下所示,采用 csv 格式:

1,2,3,4
1,2,3,4
1,2,3,4
1,2,3,4
.
.
.
1,2,3,4

我想让它看起来像这样,使用 grep、awk 或 sed(或其他任何工作):

[func (func (func 0)) [1 2 3 4]]
[func (func (func 1)) [1 2 3 4]]
[func (func (func 2)) [1 2 3 4]]
.
.
.
[func (func (func N)) [1 2 3 4]]

其中N 是文件中的行数。所以基本上将文件的行号插入到行本身中。

【问题讨论】:

    标签: regex bash shell awk sed


    【解决方案1】:

    while IFS=, read -r a1 a2 a3 a4; do
        echo "[func (func (func $((c++)))) [$a1 $a2 $a3 $a4]]"
    done < file
    

    【讨论】:

    • 我喜欢纯bash解决方案+1。
    • 您还可以改进它以支持任意数量的值,使用数组:while IFS=, read -ra array; do echo "[func (func (func $((c++)))) [${array[@]}]]"; done &lt; file
    【解决方案2】:

    您可以使用awkNR 变量。

    类似这样的:

    awk '{ gsub(/,/, " "); print "[func (func (func "(NR-1)")) ["$0"]]"; }' datafile
    

    【讨论】:

      【解决方案3】:

      这可能对你有用(GNU sed):

      sed = file | sed 'N;s/\(.*\)\n\(.*\)/[func (func (func \1)) [\2]/'
      

      这会将行号插入输出流 (Stdout),然后使用第二次 sed 调用将其与其行配对并输出所需的字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-11
        相关资源
        最近更新 更多