Sen*_*nts 4 command-line sed awk csv text-processing
我在一个文件中包含结构松散的记录,由 3 或 4 行文本组成(大部分)由空行分隔。并非所有记录都有空行分隔符,但每条记录的最后一行都以“已添加”一词开头。我想生成一个 csv 文件,每条记录在一行上,前面是行号。到目前为止,我只能生成由任意数量的空格和冗余逗号分隔的所有记录的串联。
从逻辑上讲,我试图实现以下目标:
读取行,如果行以“已添加”开头,则在末尾保留换行符,
否则将“换行符”替换为“,”,
或者如果行为空白,则将其删除
endif
样本数据:
Peter Green
Space Monkey at Area 51
Joined
Added by SF 3 weeks ago
Will Rossiter
Joined
Added by SF 3 weeks ago
Dean Matthews
Guitarist at Blues
Joined
Added by SF 3 weeks ago
Hobbit Mak
Farnborough, United Kingdom
Joined
Added by SF 3 weeks ago
Keneth W Moorfield
THE STOREMAN
Joined
Added by SF 3 weeks ago
Mick Georgious
Software Engineer
Joined
Added by SF 3 weeks ago
Run Code Online (Sandbox Code Playgroud)
尝试:
awk '/./{ printf "%s%s", $0, (/Added/?"\n":",") }' data
Run Code Online (Sandbox Code Playgroud)
使用您的样本输入数据:
$ awk '/./{printf "%s%s",$0,(/Added/?"\n":",")}' data
Peter Green,Space Monkey at Area 51,Joined,Added by SF 3 weeks ago
Will Rossiter,Joined,Added by SF 3 weeks ago
Dean Matthews,Guitarist at Blues,Joined,Added by SF 3 weeks ago
Hobbit Mak,Farnborough, United Kingdom,Joined,Added by SF 3 weeks ago
Keneth W Moorfield,THE STOREMAN,Joined,Added by SF 3 weeks ago
Mick Georgious,Software Engineer,Joined,Added by SF 3 weeks ago
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
/./{...}
仅当该行包含字符时,才执行花括号中的命令。换句话说,这会忽略空行。
printf "%s%s",$0,(/Added/?"\n":",")
这将打印表示为 的行,$0后跟逗号或换行符,具体取决于该行是否与 regex 匹配Added。
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |