0

我有这种情况:

文件内容:

10.1.1.1
10.1.1.2
10.1.1.3
10.1.1.4

我想要 sed 或 awk 以便在每次返回新行时对文件进行 cat 处理。

喜欢

第一次迭代:

cat ip | some magic
10.1.1.1

Second iteration returns
10.1.1.2
Third iteration returns
 10.1.1.3
Fourth iteration returns
10.1.1.4

在 n 次迭代后,它返回到第 1 行

第五次迭代返回:

10.1.1.1

我们可以使用 sed 或 awk 来实现吗?

4

2 回答 2

1

你不能用猫来做这件事。你也不能在管道上寻找,所以你不能使用管道..

您可以使用嵌套的 while 循环来执行此操作

while ((1))
do
    while read line
    do
       echo "$line"
    done <somefile
done
于 2013-10-28T13:13:54.050 回答
1

您需要将行号存储在一个文件中,并在每次调用时用模数递增。

get_line () {
    if [[ ! -e /var/local/get_line.next ]]
    then
        if [[ ! -e /var/local ]]
        then
            mkdir -p /var/local
        fi
        line_no=1
    else
        line_no=$(< /var/local/get_line.next)
    fi
    file_length=(wc -l < ip_file)
    if ((file_length == 0))
    then
        echo "Error: Data file is empty" >&2
        return 1
    fi
    if ((line > file_length))
    then
        line=1
    fi
    sed -n "$line_no{p;q}" ip_file
    echo "$((++line_no))" > /var/local/get_line.next
}

这是您可以合并到脚本中的函数的形式。随意更改 get_line.next 文件的位置。请注意,如果需要,读取或写入文件或创建目录的权限需要正确。

您将不需要使用cat.

于 2013-10-29T01:37:03.400 回答