我希望在这种情况下加入多行,在分隔符之后总是有4行,但这并不意味着将来其中一行可以有4行以上。无论如何,我想在使用分隔符--
时将它们连接在一行并将其排除在最终视图示例之外:
--
CATALOG
DB1
1
good
--
USERS
DB2
3
good
我在tr
awk
尝试了几件事但没有成功。
我想做的最终观点是:
CATALOG DB1 1 good
USERS DB2 3 good
答案 0 :(得分:2)
我会将记录分隔符设置为--
,然后遍历字段:
awk -v RS="--" 'NF{for (i=1;i<=NF;i++) printf ("%s%s", $i, (i==NF?"\n":FS) )}' file
-v RS="--"
将记录分隔符设置为--
,而不是默认的新行NF{}
只要记录中有字段,请执行括号内的操作。for (i=1;i<=NF;i++) printf ("%s%s", $i, (i==NF?"\n":FS) )
遍历打印所有字段的字段。它们之间的分隔符始终为FS
(其默认值为空格),如果我们正在处理最后一行,则为新行。额外的线条。
$ cat a
--
CATALOG
DB1
1
good
--
USERS
DB2
3
good
bad
$ awk -v RS="--" 'NF{for (i=1;i<=NF;i++) printf ("%s%s", $i, (i==NF?"\n":FS) )}' a
CATALOG DB1 1 good
USERS DB2 3 good bad
答案 1 :(得分:1)
sed '#n
/^--$/ b print
H;$!b
:print
s/.*//;x;s/^[[:cntrl:][:space:]]*//;s/[[:cntrl:][:space:]]\{1,\}/ /gp' YourFile
答案 2 :(得分:1)
这是一个简单的gnu awk
(由于RS中有多个字符而引起的gnu)。
awk -v RS="--" '{$1=$1}NR>1' file
CATALOG DB1 1 good
USERS DB2 3 good
$1=$1
这会使用新的记录选择器重新创建文件,并使用默认的字段空间
NR>1
然后打印除第一行(空白)以外的所有行。