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 文件中的模式匹配并附加到匹配的行的主要内容,如果未能解决你的问题,请参考以下文章

列出与R中的完整路径模式匹配的所有文件

从文件夹中的所有文本文件中提取与模式匹配的行到单个输出文件

删除文件中与模式不匹配的行

awk next 和模式匹配

grepsedawk基础

PHP遍历csv的每一行并返回具有匹配元素的行