awk linux 分隔_awk-语法深入-记录、字段分隔符

本文详细介绍了awk中如何处理记录和字段的分隔符,包括输入记录分隔符RS、输出记录分隔符ORS、字段分隔符FS和输出字段分隔符OFS的用法。通过实例演示了如何将多行记录合并为一行,并使用制表符作为字段分隔符,便于数据导入Excel。
摘要由CSDN通过智能技术生成

awk规定,对于文本文件,默认情况下,一条记录对应一行,即记录之间的默认分隔符是换行符;而一条记录又可以分为多个字段,默认字段分隔符为空格。

输入记录分隔符变量:RS(record sign)

输出记录分隔符变量:ORS(output record sign)

字段分隔符变量:FS(field sign)

输出字段分隔符变量:OFS(output field sign)

1.一条记录占多行(多行记录)

有些情况下:一条记录跨越多行,记录与记录之间使用非换行符。这种情况下需要修改记录分隔符变量RS,RS告诉awk当前记录什么时候结束。

例如:

BEGIN {

FS="\n"  // 将字段分隔符设为换行符,一个字段占一行

RS=""    // 将记录分隔符设为空白行,记录之间由空白行分隔

}

2.OFS 和 ORS

输出字段分隔符(OFS),默认为单个空格" ",可以修改OFS变量,制定输出字段之间的分隔符。

eg.

print"hello',"there","jim"

// 输出为 hello there jim,这里的逗号仅告诉awk:"helo" "there" "jim"是三个单独的字段,输出字段之间的分隔符仍是默认的OFS-空格.

要使用逗号来区分输出的字段,如下:

BEGIN{

FS="\n"

RS=""

OFS="," // 将输出字段分隔符设置为逗号

}

输出记录分隔符(ORS),默认为换行(\n),也可自定义。

BEGIN{

FS="\n"

RS=""

OFS=","

ORS="\n\n"// 输出间隔翻倍

}

将多行记录换成一行内使用TAB分段格式

a.md内容如下,一条记录占三行,记录之间用空白行区分,一个字段占一行。

huanxgin

XIAN

711711

CC

HANGZHOU

399229

MM

Shanghai

888912

要求:将一条记录整理为一行,个字段之间用tab分隔,以便导入excel处理:

[root@web1 awk]#awk'BEGIN{FS="\n";RS="";OFS="\t"} {print $1,$2,$3}'a.md

huanxgin XIAN711711 // 输出分隔符指定为制表符

CC HANGZHOU399229

MMShanghai888912

[root@web1 awk]#awk'BEGIN{FS="\n";RS="";ORS=""} { x=1; while(x

huanxgin XIAN711711

CC HANGZHOU399229

MMShanghai888912

总结: awk 命令与shell相同,一条命令占一行的情况下不需要分号来进行区分,多条命令在同一行时,需要分号来区分。

while 、if、for语句也保持一致.

NF、NR 常用来计算待处理文件的行数,引用最后一个字段($NF)。

awk规定,对于文本文件,默认情况下,一条记录对应一行,即记录之间的默认分隔符是换行符;而一条记录又可以分为多个字段,默认字段分隔符为空格。

输入记录分隔符变量:RS(record sign)

输出记录分隔符变量:ORS(output record sign)

字段分隔符变量:FS(field sign)

输出字段分隔符变量:OFS(output field sign)

1.一条记录占多行(多行记录)

有些情况下:一条记录跨越多行,记录与记录之间使用非换行符。这种情况下需要修改记录分隔符变量RS,RS告诉awk当前记录什么时候结束。

例如:

BEGIN {

FS="\n"  // 将字段分隔符设为换行符,一个字段占一行

RS=""    // 将记���分隔符设为空白行,记录之间由空白行分隔

}

2.OFS 和 ORS

输出字段分隔符(OFS),默认为单个空格" ",可以修改OFS变量,制定输出字段之间的分隔符。

eg.

print"hello',"there","jim"

// 输出为 hello there jim,这里的逗号仅告诉awk:"helo" "there" "jim"是三个单独的字段,输出字段之间的分隔符仍是默认的OFS-空格.

要使用逗号来区分输出的字段,如下:

BEGIN{

FS="\n"

RS=""

OFS="," // 将输出字段分隔符设置为逗号

}

输出记录分隔符(ORS),默认为换行(\n),也可自定义。

BEGIN{

FS="\n"

RS=""

OFS=","

ORS="\n\n"// 输出间隔翻倍

}

将多行记录换成一行内使用TAB分段格式

a.md内容如下,一条记录占三行,记录之间用空白行区分,一个字段占一行。

huanxgin

XIAN

711711

CC

HANGZHOU

399229

MM

Shanghai

888912

要求:将一条记录整理为一行,个字段之间用tab分隔,以便导入excel处理:

[root@web1 awk]#awk'BEGIN{FS="\n";RS="";OFS="\t"} {print $1,$2,$3}'a.md

huanxgin XIAN711711 // 输出分隔符指定为制表符

CC HANGZHOU399229

MMShanghai888912

[root@web1 awk]#awk'BEGIN{FS="\n";RS="";ORS=""} { x=1; while(x

huanxgin XIAN711711

CC HANGZHOU399229

MMShanghai888912

总结: awk 命令与shell相同,一条命令占一行的情况下不需要分号来进行区分,多条命令在同一行时,需要分号来区分。

while 、if、for语句也保持一致.

NF、NR 常用来计算待处理文件的行数,引用最后一个字段($NF)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值