sed 解析数据:用空格分隔的字段(单词)

sed 解析数据:用空格分隔的字段(单词)

我在 Linux 上使用sed,尝试匹配具有三个字段的数据行,以制表符分隔(但分隔符可以是任何空格),如下所示:

 12.3 0a 1b
 15.5 0v 1h
 17.7 5k 3c

;现在我正在使用这个:

sed -n 's/^\([^[:blank:]]*\)[[:blank:]]*\([^[:blank:]]*\)[[:blank:]]*\([^[:blank:]]*\)/\1\t\3\t\2/p' mydata.txt

...所以我能够通过\1、、提取和操作(在示例中,仅位置反转)各个字段\2\3

有没有更好的方法来指定这一点?

干杯!

答案1

awk 中的一个简单示例,用于说明可以做什么

awk '{print $2 $1 $3}` < input_file.txt

只需重新排列前两个字段,同时在所有行上打印所有三个字段。

#要重新排列这些行,恰好有三个字段,保留以(即 sh 类语言中的注释)开头的任何字段,并删除所有其他字段

awk `/^#/{print $0;next} NF==3{print $2 $1 $3;next} {}' < input_file.txt

大多数 unix 系统都有相当完整的 awk 手册页。

对您的目的而言,重要的是字段可以通过$1$2、... 访问,其中“字段”定义为由 FS(即字段分隔符)分隔的字符串,默认为(空格)。

相关内容