使用 awk 检查不同行的变量
我想使用 awk 将多行不同长度的值合并到一行(如果它们匹配)。在以下第一个字段的示例匹配值中, 将第二个字段中的值聚合到列表中。
输入,示例 csv:
222;a;DB;a
222;b;DB;a
555;f;DB;a
4444;a;DB;a
4444;d;DB;a
4444;z;DB;a
输出:
222;a|b
555;f
4444;a|d|z
如何编写 awk 表达式(可能是其他 shell 表达式)来检查第一个字段值是否与下一行/上一行匹配,然后打印第二个字段值的列表,这些值聚合并由管道?
I want to combine values from multiple lines with different lengths using awk into one line if they match. In the following sample match values for first field,
aggregating values from second field into a list.
Input, sample csv:
222;a;DB;a
222;b;DB;a
555;f;DB;a
4444;a;DB;a
4444;d;DB;a
4444;z;DB;a
Output:
222;a|b
555;f
4444;a|d|z
How can I write an awk expression (maybe some other shell expression) to check if the first field value match with the next/previous line, and then print a list of second fields values aggregated and separated by a pipe?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
根据您的要求,这会检查连续的行。
This, as you requested, checks the consecutive lines.
这个单线有用吗?
在这里测试:
如果你想保持排序,请在末尾添加
|sort
。does this oneliner work?
tested here:
if you want to keep it sorted, add a
|sort
at the end.有点复杂,但可以完成工作:
Slightly convoluted, but does the job:
假设您已将字段分隔符 (-F) 设置为 ; :
第一行和第一个字符略有错误,但这是读者的练习:-)。两个简单的 if 就足以解决这个问题。
(编辑:错过了最后一行。)
Assuming that you have set the field separator ( -F ) to ; :
The first line and the first character are slightly wrong, but that's an exercise for the reader :-). Two simple if's suffice to fix that.
(Edit: Missed out last line.)
这应该有效:
命令:
输入:
输出:
this should work:
Command:
Input:
Output: