我有一个 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