我在 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(即字段分隔符)分隔的字符串,默认为(空格)。