Bash 使用sed合并行并添加逗号
我发现了几个相关的问题,但没有一个符合我的需要,而且因为我是一个真正的初学者,我想不出来 我有一个文本文件,其中的条目如下,由一个空行分隔:Bash 使用sed合并行并添加逗号,bash,sed,Bash,Sed,我发现了几个相关的问题,但没有一个符合我的需要,而且因为我是一个真正的初学者,我想不出来 我有一个文本文件,其中的条目如下,由一个空行分隔: example entry &with/ special characters next line (any characters) next %*entry more words 我希望输出合并这些行,在它们之间加一个逗号,然后删除空行。即,示例应如下所示: example entry &with/ special character
example entry &with/ special characters
next line (any characters)
next %*entry
more words
我希望输出合并这些行,在它们之间加一个逗号,然后删除空行。即,示例应如下所示:
example entry &with/ special characters, next line (any characters)
next %*entry, more words
我更喜欢sed,因为我知道一点,但也很高兴linux命令行上有其他解决方案。根据Kent优雅的建议改进:
awk 'BEGIN{RS="";FS="\n";OFS=","}{$1=$1}7' file
example entry &with/ special characters,next line (any characters)
next %*entry,more words
它允许每个块有任意数量的线,而不是我以前的每个块有2条刚性线。谢谢你,肯特注意:7
是肯特的商标。。。任何非零表达式都会导致awk
打印整个记录,他喜欢7
您可以使用awk
:
awk 'BEGIN{RS="";FS="\n";OFS=","}{print $1,$2}' file
这将记录分隔符设置为空行,字段分隔符设置为换行符,输出字段分隔符设置为逗号
输出:
awk 'BEGIN{RS="";FS="\n";OFS=","}{$1=$1}7' file
example entry &with/ special characters,next line (any characters)
next %*entry,more words
根据肯特优雅的建议改进:
awk 'BEGIN{RS="";FS="\n";OFS=","}{$1=$1}7' file
example entry &with/ special characters,next line (any characters)
next %*entry,more words
它允许每个块有任意数量的线,而不是我以前的每个块有2条刚性线。谢谢你,肯特注意:7
是肯特的商标。。。任何非零表达式都会导致awk
打印整个记录,他喜欢7
您可以使用awk
:
awk 'BEGIN{RS="";FS="\n";OFS=","}{print $1,$2}' file
这将记录分隔符设置为空行,字段分隔符设置为换行符,输出字段分隔符设置为逗号
输出:
awk 'BEGIN{RS="";FS="\n";OFS=","}{$1=$1}7' file
example entry &with/ special characters,next line (any characters)
next %*entry,more words
在缓冲区中加载文件后更改所有。可以在读取文件时根据空行或非空行“动态”完成
在GNU上使用-e
在缓冲区中加载文件后更改所有。可以在读取文件时根据空行或非空行“动态”完成
在GNU sed上使用
-e
Simplesed
命令
sed ':a;N;$!ba;s/\n/, /g;s/, , /\n/g' file
->根据答案,此代码将所有新行替换为:a;N、 美元!文学士;s/\n/,/g
(逗号和空格),
- 因此,在只运行第一个命令之后,输出将是
example entry &with/ special characters, next line (any characters), , next %*entry, more words
->在上述输出中用新行替换s/,/\n/g
,将获得所需的结果,
example entry &with/ special characters, next line (any characters) next %*entry, more words
sed
命令
sed ':a;N;$!ba;s/\n/, /g;s/, , /\n/g' file
->根据答案,此代码将所有新行替换为:a;N、 美元!文学士;s/\n/,/g
(逗号和空格),
- 因此,在只运行第一个命令之后,输出将是
example entry &with/ special characters, next line (any characters), , next %*entry, more words
->在上述输出中用新行替换s/,/\n/g
,将获得所需的结果,
example entry &with/ special characters, next line (any characters) next %*entry, more words
sed ':a;$!N;/^\s*$/M!s/\n/, /;ta;/\`\s*$/M!P;D' file
这可能适用于您(GNU-sed):
将下一行附加到当前行,如果换行符的任一侧有字符,则用逗号和空格替换换行符,然后重复。最终将到达一个空行或文件结尾,然后仅打印下一行(如果它不是空的)
另一个版本(允许空行中有空白)将是:
sed ':a;$!N;/^\s*$/M!s/\n/, /;ta;/\`\s*$/M!P;D' file
数据中的逗号应该在输出中以某种方式消除歧义吗?空行是一个条目分隔符,还是您总是有两行应该连接在一起?数据中的逗号应该在输出中以某种方式消除歧义吗?空行是一个条目分隔符吗,或者你总是有两行应该连接在一起吗?+1但是在
开始
块之后,我会做…'{$1=$1}7'文件
用于“块”中有两行以上的情况。op需要逗号后的空格
。您的代码应该是awk'BEGIN{RS=“;FS=“\n”;OFS=“,”}{print$1,$2}'
+1但是在开始
块之后,我会做。”{$1=$1}7'文件
用于“块”中有两行以上的情况。op需要逗号后有空格
。您的代码应该是awk'BEGIN{RS=“;FS=“\n”;OFS=“,”}{print$1,$2}'
您必须在文本中或,
在一行末尾处理,
的情况。如果没有出现,您的代码是快速和简单的。您必须处理文本中有,
或一行末尾有,
的情况。如果没有发生,您的代码是快速和简单的