在bash脚本中是否有类似于logical AND的东西可以使用?

在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

有没有一种方法可以在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 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