首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用awk来使用空行作为记录分隔符,以及如何使用新行作为字段分隔符?

如何使用awk来使用空行作为记录分隔符,以及如何使用新行作为字段分隔符?
EN

Unix & Linux用户
提问于 2019-10-22 03:53:13
回答 2查看 3.6K关注 0票数 1

我有一个文件,我需要以某种方式格式化。文件中的记录具有以下格式;

代码语言:javascript
复制
Record
One

Record
Two

每个记录用空行分隔,每个字段用换行符分隔。我需要以下格式的记录;

代码语言:javascript
复制
Record:One

Record:Two

这是我目前所拥有的;

代码语言:javascript
复制
#!/bin/bash

cat File.txt | awk '{ RS=""; FS="\n"; OFS=":"; ORS="\n" } {print $1,$2 }'

这个代码给出了这个输出;

代码语言:javascript
复制
:ecord
:one

甚至和我要找的东西都不太接近。这能在一条线上完成吗?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2019-10-22 06:05:17

在perl中:

代码语言:javascript
复制
perl -l -p -e 'BEGIN {$/="";  $\="\n\n"}; s/\n/:/mg' input 
  • -l使perl能够自动处理记录结束。
  • -p在脚本周围放置一个隐式while ... print循环,以便它能够自动读取、处理并打印每个记录(类似于awk)。
  • 将输入记录分隔符($/)设置为$/=""空,告诉D11以段落模式读取输入(一个或多个空行分隔每个记录)。
  • $\="\n\n"将输出记录分隔符设置为两个换行符,以便用空行分隔记录。
  • 然后,它将每个记录中的所有换行符替换为一个:

这适用于每个记录中的任意数量的字段。记录中的每一行都是单独的字段。

示例输出:

代码语言:javascript
复制
$ perl -lpe 'BEGIN {$/=""; $\="\n\n"}; s/\n/:/mg' input 
Record:One

Record:Two

注意:在Record:Two之后有一个空行。

票数 1
EN

Unix & Linux用户

发布于 2019-10-22 06:04:56

尝尝这个,

代码语言:javascript
复制
awk NF=NF RS="" FS="\n" OFS=":" ORS="\n"  File.txt

Record:One
Record:Two
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/548017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档