在CSV文件中模式匹配并追加到匹配行

-6 投票
3 回答
568 浏览
提问于 2025-04-18 16:56

我想从一个csv文件中提取那些符合某种模式的行,然后把这个模式作为新的一列,添加到每一行的末尾。

文件名是 file.csv

file.csv

/var/log/0,33,New file,0
/var/log/0,34,Size increased,2345
/abc/Repli,11,New file,0
/abc/Repli,87,Size Increase,11

在上面的文件 file.csv 中,我执行了

sed -n -i"" '/Repli/ s/$/,Repli/p' file.csv

这样做会删除其他不想要的行,我并不想这样。

3 个回答

0

下面这段代码的作用是,如果找到了匹配的内容,就把这个模式添加上去。如果没有找到匹配的内容,就只打印这一行。

awk '{if($0 ~ /pattern/) print $0",pattern"; else print $0;}' file.csv
0

提取符合特定模式的行并进行修改

如果你想只选择包含某个模式的行,并在每行的末尾添加这个模式作为新的一列,可以这样做:

awk '/pattern/ {print $0 ",pattern"}'  file.csv >tmp$$ && mv tmp$$ file.csv

或者,

sed -b -n -i"" '/pattern/ s/$/,pattern/p' file.csv

保留所有行,但修改那些符合特定模式的行

awk '/pattern/ {$0=$0 ",pattern"} 1'

或者,

sed -b -i"" '/pattern/ s/$/,pattern/' file.csv

去掉Windows换行符,同时保留所有行并修改符合特定模式的行

sed -i"" 's/\r//; /pattern/ s/$/,pattern/' file.csv

去掉Windows换行符,同时保留所有行并修改那些包含斜杠的符合特定模式的行

假设这个模式中包含斜杠,比如 /var/log/abc/file/0/。那么:

sed -i"" 's/\r//; \|pattern| s|$|,pattern|' file.csv

例如:

sed -i"" 's/\r//; \|/var/log/abc/file/0/| s|$|,/var/log/abc/file/0/|' file.csv
0

我找到了一种用sed匹配路径的方法。我是通过转义字符实现的,效果不错。

这个模式是:Pattern="\/var\/log\/Model\/1\/"

模块是:Module=BE

然后我用这个命令:sudo sed -i"" "s/\r//; /$Pattern/ s/$/,$Module/" resultFile.csv

效果很好!!

撰写回答