在CSV文件中模式匹配并追加到匹配行
我想从一个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
效果很好!!