我正在使用一个for f in $(cat /dir/file)
嵌套循环,里面有一个条件来测试if (($f=$z))
,z
在for z in $(cat /dir/file2)
循环中,f
循环嵌套在其中。 我想知道是否可以写入$z
字符串在file2
行上方的行,如果$z=$f
.file2
中的每一行都是一个 5 位数字,例如 07732,如果有一行 07732 在file
我想在文件 07732 所在的行上方写下该行 2 是
我现在得到的是
for z in $(cat /dir/file2)
do
for f in $(cat /dir/file)
do
if (( $f=$z ))
then
(what im asking about)
i=0
break
else
i=1
fi
done
if ((i=1))
then
......
我知道我有语法错误,不需要纠正这些错误。 对不起,如果我解释得很差,请告诉我是否需要更详细地解释
延迟匹配行的输出。而且,正如查尔斯·达菲(Charles Duffy)在表扬中指出的那样,不要阅读带有for
的台词。另请注意,您将读取file1 的每一行的整个 file2。如果 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
循环使用额外的文件描述符,以便能够在外部循环从 STDIN 文件描述符读取时从第二个文件读取。这样就可以同时独立读取多个文件。-u 3
告诉read
使用文件描述符 3。3<
重定向将 file2 的内容放在文件描述符 3 上,以便可以在那里读取它们。