如何比较txt文件中的内容?

如何比较txt文件中的内容?

我有一个 txt 文件,其名称为输出.txt:

output.txt

2128,4.4
2128,5.5

我希望有一个比较脚本,第一行逗号前的第一个数字等于第二行的第一个数字,然后它将返回第二行逗号后的第二个数字。

output:
5.5

如果输出.txt第一行第一个数字和第二行第一个数字有不同的数字,例如:

output.txt
2622,56
1011,65

然后预期的输出将返回一个字符串价值不一样

答案1

您可以使用 AWK 脚本来处理此问题:

#!/usr/bin/awk -f
BEGIN { FS = "," }
NR == 1 { value = $1 }
NR == 2 {
    if ($1 == value) print $2
    else print "The value is different"
    exit
}

这将存储第一行的第一个值,然后将其与第二行的第一个值进行比较,如果相等则打印第二个值,否则打印“值不同”。然后它显式退出,以避免花时间阅读更多行。

答案2

确认于bash

#!/bin/bash

file=/path/to/output.txt

if [[ $(awk -F , 'NR==1 {print $1}' $file) -eq $(awk -F , 'NR==2 {print $1}' $file) ]]; then

awk -F , 'NR==2 {print $2}' $file

else

echo "The value is different"

fi

- 变量file被分配到output.txt所在的路径。

- 在if语句中,awk用作,分隔符并打印并比较每行第二列的第二个值。

-如果值相等,则打印第二行的第二列,即5.5

-如果值不相等,则打印“值不同”。

我使用两个具有您指定的值的文件对此进行了测试。您可以更改file脚本中变量的值以与其他人一起工作。

答案3

我尝试使用 sed 和 awk 命令

#!/bin/bash
i=`sed -n '1p' l.txt| awk -F "," '{print $1}'`
j=`sed -n '2p' l.txt| awk -F "," '{print $1}'`
if [[ $i == $j ]]
then
awk -F "," 'NR==2{print $2}' l.txt
else
echo "The value is different"
fi

输出

5.5

答案4

通常 sed 以每行为基础进行操作。我们可以覆盖它并将下一行填充到模式空间中进行检查。

一旦我们确保模式空间中两行的第一个字段相同,我们就进行替换并前往出口。 OTW,使用所需的消息对完整的模式空间进行了彻底检查,然后 sed 将其作为默认操作进行打印。

sed -e '
   N
   s/^\([^,]*\),.*\n\1,\(.*\)/\2/;t
   s/.*/The Value is Different/
'  file.csv

相关内容