我正在使用带有条件的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
我知道我有语法错误,无需更正。 抱歉,如果我的解释真的很差,请告诉我是否需要详细解释
答案 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上,以便可以在其中读取它们。