我需要知道是否有可能在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/