在bash脚本中是否有类似于logical AND的东西可以使用?
有没有一种方法可以在bash脚本中同时读取两个文件?类似于编程语言示例中使用&在bash脚本中是否有类似于logical AND的东西可以使用?,bash,Bash,有没有一种方法可以在bash脚本中同时读取两个文件?类似于编程语言示例中使用& for i in $(cat filea.txt) & for j in $(cat fileb.txt) do if "$j" = "$i" then echo "$i" fi done 意思:我希望将文件a的第1行与文件B的第1行进行比较,并将文件a的第2行与文件B的第2行进行比较,依此类推。您可以做些什么来比较行,而不是文字,这有点扭曲,但是: while read -r -u
for i in $(cat filea.txt) & for j in $(cat fileb.txt)
do
if "$j" = "$i"
then echo "$i"
fi
done
意思:我希望将文件a的第1行与文件B的第1行进行比较,并将文件a的第2行与文件B的第2行进行比较,依此类推。您可以做些什么来比较行,而不是文字,这有点扭曲,但是:
while read -r -u 3 line1 && read -r -u 4 line2
do
if [ "$line1" = "$line2" ]
then echo "$line2"
fi
done 3<filea.txt 4<fileb.txt
还有其他方法可以实现这一点,特别是使用
tr
而不是printf
,如果文件很大(很多兆字节大),这会更好。比较行而不是字的方法有点扭曲,但是:
while read -r -u 3 line1 && read -r -u 4 line2
do
if [ "$line1" = "$line2" ]
then echo "$line2"
fi
done 3<filea.txt 4<fileb.txt
还有其他方法可以实现这一点,特别是使用
tr
而不是printf
,如果文件很大(很多兆字节大),这会更好。如果目标是输出两个文件中相同的行,那么您可以使用
但是,如果您确实需要逐步浏览两个文件,那么您可以使用文件描述符
#! /bin/bash
while read -r lineF1 <&3 && read -r lineF2 <&4; do
echo "$lineF1"
echo "$lineF2"
done 3<file1 4<file2
#/bin/bash
而read-r lineF1如果目标是输出两个文件中相同的行,则可以使用
但是,如果您确实需要逐步浏览两个文件,那么您可以使用文件描述符
#! /bin/bash
while read -r lineF1 <&3 && read -r lineF2 <&4; do
echo "$lineF1"
echo "$lineF2"
done 3<file1 4<file2
#/bin/bash
而read-r lineF1我不认为有任何这样的构造。如果有,它将非常特定于bash
。我相信您正在寻找bash中的锁步迭代什么是$cat
?我不知道如何在这里执行cat
命令而不使用backticks`cat filea.txt`
。即使这样也会选择文字,而不是线条。(乔纳森提供的更正也是如此。)@SnakesandCoffee:我在Bash 4.2参考手册中找不到“lock step”或“lockstep”……你能详细说明你在说什么吗?这是一个真实的功能,还是“需要什么?”@JonathanLeffler听起来像是他编造的。但是,如果我们也有办法一次提取一行,将这两个文件交错在一起可能会有所帮助:。我认为没有任何这样的构造。如果有,它将非常特定于bash
。我相信您正在寻找bash中的锁步迭代什么是$cat
?我不知道如何在这里执行cat
命令而不使用backticks`cat filea.txt`
。即使这样也会选择文字,而不是线条。(乔纳森提供的更正也是如此。)@SnakesandCoffee:我在Bash 4.2参考手册中找不到“lock step”或“lockstep”……你能详细说明你在说什么吗?这是一个真实的功能,还是“需要什么?”@JonathanLeffler听起来像是他编造的。但是,如果我们也有一种方法可以一次提取一行,那么将两个文件交错在一起可能会有所帮助:.+1用于横向思考——尽管我认为它没有抓住问题的关键,即是否有一种方法可以并行地跨接两个文件的行;还有一个问题,如何排除文件2的最后3行;我不希望它们出现在我的输出中。当任何一个文件结束时,该变体将停止。文件中的行数是否相等?+1用于横向思考-尽管我认为它忽略了问题的关键,即是否有一种方法可以并行地跨过两个文件中的行;还有一个问题,如何排除文件2的最后3行;我不希望它们出现在我的输出中。当任何一个文件结束时,该变体将停止。文件中的行数是否相等?read-u代表什么?3和4代表什么?@user2613272根据帮助阅读
,-u
请求特定的文件描述符。3和4是文件描述符。在后一个例子中,他是从标准输入中读取的。那么-r怎么说呢?确切的用途是什么?@Potatoswatter:我想help
命令作为SCCS的一部分的日子已经一去不复返了。所以你还没有学会如何阅读手册,或者按照Potatoswatter的建议使用help read
中的信息<代码>帮助阅读
部分说明:如果给出了-r
选项,则表示“原始”输入,并禁用反斜杠转义。要了解更多关于这意味着什么,请阅读手册。read-u代表什么?3和4代表什么?@user2613272根据帮助阅读
,-u
请求特定的文件描述符。3和4是文件描述符。在后一个例子中,他是从标准输入中读取的。那么-r怎么说呢?确切的用途是什么?@Potatoswatter:我想help
命令作为SCCS的一部分的日子已经一去不复返了。所以你还没有学会如何阅读手册,或者按照Potatoswatter的建议使用help read
中的信息<代码>帮助阅读
部分说明:如果给出了-r
选项,则表示“原始”输入,并禁用反斜杠转义。要了解更多关于这意味着什么,请阅读手册。
#! /bin/bash
while read -r lineF1 <&3 && read -r lineF2 <&4; do
echo "$lineF1"
echo "$lineF2"
done 3<file1 4<file2