csv 文件中的模式匹配并附加到匹配的行
Posted
技术标签:
【中文标题】csv 文件中的模式匹配并附加到匹配的行【英文标题】:Pattern Matching in a csv file and appending to matched lines 【发布时间】:2014-10-05 01:15:01 【问题描述】:我想将这些行提取到一个与 Pattern 匹配的 csv 文件中,然后将相同的 Pattern 附加到每个提取行的末尾作为 csv 文件的新添加列。
文件.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
In above file file.csv, I executed
sed -n -i"" '/Repli/ s/$/,Repli/p' file.csv
这会删除我不想要的剩余行。
【问题讨论】:
您可能想为这个问题添加更多细节。也许发布一些你尝试过的代码。 您要附加模式(可能是正则表达式?),还是模式匹配的值? 我试过了。但是每次它添加一个控制字符 ^M 并且在 excel 中它显示在下一行而不是下一列 @mhawke 我想根据与模式的匹配来追加。例如。匹配/var/log/0/,如果找到,在匹配行的最后一列追加BE 是否还有其他情况,例如如果匹配 /var/log/1 附加 XYZ ? 【参考方案1】:仅提取与模式匹配的行并修改它们
仅选择包含模式的行,然后在行尾添加模式作为新列:
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
【讨论】:
我试过 awk '/pattern/ print $0 ",pattern"' file.csv。但它给了我附加在行首而不是结尾的模式。此外,我需要对文件进行更改。使用 awk 只是给我更改输出。 查看更改文件的更新答案。print $0 ",pattern"
将把模式放在行尾。如果您在尝试时发生了其他问题,请准确记录您对示例输入、代码和示例输出所做的操作。
sed -n -i"" '/pattern/ s/$/,pattern/p' file.csv 在添加模式之前添加了一个控制字符,因此当我在 excel 中打开这个 csv 时,最后一列实际上显示在下一行。但我想在同一行显示它。
这不应该发生。请准确记录您对示例输入、代码和出现控制字符的输出所做的操作。
sed -n -i"" '/pattern/ s/$/,pattern/p' file.csv 在文件上运行,因为在 file.csv 中只剩下包含模式的行和其他行被删除。在每个匹配行的模式之前还添加了 ^M 作为 '^M, pattern'【参考方案2】:
I found a solution to match paths using sed. I did it through escap character and it worked.
Pattern="\/var\/log\/Model\/1\/"
Module=BE
sudo sed -i"" "s/\r//; /$Pattern/ s/$/,$Module/" resultFile.csv
工作得很好!!
【讨论】:
【参考方案3】:如果找到匹配项,则下面的 sn-p 会附加模式。如果未找到匹配项,则仅打印该行,
awk 'if($0 ~ /pattern/) print $0",pattern"; else print $0;' file.csv
【讨论】:
以上是关于csv 文件中的模式匹配并附加到匹配的行的主要内容,如果未能解决你的问题,请参考以下文章