我有一个包含abc.csv
以下内容的文件。
a6caa290d03ae75dd5f3bf9214f0b523;CO.jar,a6caa290d03ae75dd5f3bf9214f0b523;CO.jar,
a1a5bf1547f50feea4120290343f89e4;Common.jar,a1a5bf1547f50feea4120290343f89e4;Common.jar,
1264897ea44d85c3f0dba127ff02f514;DA.jar,1264897ea44d85c3f0dba127ff02f514;DA.jar,
e77834d4ba2a4193b94fee9470a458a4;FW.jar,e77834d4ba2a4193b94fee9470a458a4;FW.jar,
我需要逐行读取文件并比较之前和之后的值,
如果两者相等,则在该行的同一端写入SUCCESS
,否则FAILURE
在该行的同一端写入。
我尝试了以下。
for I in `cat abc.csv`
do
VAR1=`echo $I | awk -F"," {'print ${1}'}
VAR2=`echo $I | awk -F"," {'print ${2}'}
if [ ${1} == ${2} ]
then
..
fi
done
我不知道如何添加SUCCESS
或FAILURE
在每一行的末尾。知道如何实现这一点!
您可以在 awk 中完成所有操作。awk 为其输入中的每一行运行其脚本
awk 语句
print x y
打印表达式x
并y
紧挨着彼此,它们之间没有空格或字段分隔符。awk 表达式的
a ? b : c
意思是“如果a
为真,则为b
其他c
”。尝试这个,
还有一个班轮:
也试试
在运行此之前,请确保您的输入文件丢失了 DOS 行终止符 (
<CR>
= \r = 0x0D = ^M)。如果对您看到的内容感到满意,请重定向到结果文件使用 GNU
sed
(如果以standard结尾,该t
命令需要一个标签):;
sed
两行生成的示例
FAILURE
:sed
带有注释的脚本:要使用 GNU 执行就地编辑,
sed
请使用上述命令,但使用sed -i
.sed
解释
/^\([^,]*,\)\1/
:如果此正则表达式匹配,则将执行其后的替换并将添加SUCCESS
到行尾。正则表达式匹配一行开头的字符串,直到并包括第一个逗号。然后它会在第一个字符串之后立即再次尝试匹配相同的字符串。将\1
引用匹配的字符串\(...\)
。