我需要知道是否有可能在awk中使用一个新的行作为字段分隔符,在一个行中引入多个行?
例如:

$ cat yo
a aa aaa
bb bbb bbb
cccc ccccc cccc
ddd dddd ddd
eeeee eeeee eee

fffff ffffff fffffff
gggg ggggg
hhhhhh hhhhhhh hhhhhhhhh

iii iiiiiiiii iiiii
jjjj jjjjj jjjjj
kkkkk kkkkk
lllllllll lll ll

下面是我的小脑袋能想到的几件事,但都没有帮助。
cat file |awk -F'\n' '{print}'
cat yo |awk 'NF'  '{print $NF}'


cat yo |awk -F'/^$/d'  '{print $NF}'
cat yo |awk -F'^$^[ \t]*$' '{print $NF}'

cat yo |awk -F'^..' '{print $NF}'

cat yo |awk -F'\t' '{print}'

期望输出:
a aa aaa  bb bbb bbb cccc ccccc cccc ddd dddd ddd eeeee eeeee eee
fffff ffffff fffffff gggg ggggg hhhhhh hhhhhhh hhhhhhhhh
iii iiiiiiiii iiiii jjjj jjjjj jjjjj kkkkk kkkkk lllllllll lll ll

最佳答案

您可以将记录分隔符定义为RS=,这将使其段落化:每一行都是一个字段,每一条记录都是一个块:

$ awk -v RS= '{for (i=1; i<=NF; i++) printf "%s%s", $i, (i==NF?"\n":" ")}' file
a aa aaa bb bbb bbb cccc ccccc cccc ddd dddd ddd eeeee eeeee eee
fffff ffffff fffffff gggg ggggg hhhhhh hhhhhhh hhhhhhhhh
iii iiiiiiiii iiiii jjjj jjjjj jjjjj kkkkk kkkkk lllllllll lll ll

这实际上与:
awk -v RS= '{for (i=1; i<=NF; i++) printf "%s%s", $i, (i==NF?ORS:FS)}' file

关于linux - 在awk中使用空行作为文件分隔符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24733628/

10-15 00:10