回显到存在特定字符串的行上方的行

时间:2019-05-24 16:05:37

标签: bash

我正在使用带有条件的t = [-1,-2,-3,-4,-3,-2,-1] def find_even_index(nums): sum = 0 f = [] for idx, val in enumerate(nums): if idx == 0: f.append(val) else: f.append(f[idx-1] + val) sum += val for idx, val in enumerate(nums): t = 0 if idx != 0: t = f[idx - 1] if t == sum - f[idx]: return idx return -1 print find_even_index(t) 嵌套循环来测试for f in $(cat /dir/file)if (($f=$z))z循环中,其中for z in $(cat /dir/file2)循环被嵌套。 我想知道是否有可能写入f$z字符串所在的行上方的行(如果为file2$z=$f中的每一行都是5位数字,例如07732,如果file2中有一行07732,我想将该行写在文件2中07732所在的行的上方

我现在所拥有的是

file

我知道我有语法错误,无需更正。 抱歉,如果我的解释真的很差,请告诉我是否需要详细解释

1 个答案:

答案 0 :(得分:2)

延迟匹配行的输出。而且,正如查尔斯·达菲(Charles Duffy)所指出的那样,请勿读取带有for的行。另请注意,您将读取file1的每一行的整个文件 。如果file2的大小很大,则速度可能会很慢。如果file2很小,则将其读入数组。

还应该使用有意义的变量名。这不是1970年的BASIC,您只能使用单个字符。

以下是一些示例代码,其中包含了大部分示例代码,但保留了内部while循环,而不是使用数组:

while read -r file1_line
do
    while read -r -u 3 file2_line
    do
        if [[ $file2_line == $file1_line ]]
        then
            echo "some special putput"
            i=0
            break
        else
            i=1
        fi
    done 3< /path/to/file2
    echo "NOW I'm echoing $file1_line"
    if (( i == 1 ))
    then
        . . .
    fi
done < /path/to/file1

这将回显文件一中的行,但是如果有匹配项,它将在匹配的行之前回显字符串。

内部while循环使用additional file descriptor以便在外部循环从STDIN文件描述符读取时能够从第二个文件读取。这样一来,可以同时独立读取多个文件。 -u 3告诉read使用文件描述符3。3<重定向将file2的内容放在文件描述符3上,以便可以在其中读取它们。