awk 按列过滤行

awk filter rows by column

这是我的行。

2706 abc/efe/efefe/fefe 10143 fefef/dbddf/fvfvdf/vdfvdp 8927 fvdfv/fvdv/fvdfv/fvdfv 11546 fvsddfv/fdfvdv/fvddffv/fvddfv

预期输出

2706 abc/efe/efefe/fefe  
10143 fefef/dbddf/fvfvdf/vdfvdp  
8927 fvdfv/fvdv/fvdfv/fvdfv  
.  
.  
.  
.  
11546 fvsddfv/fdfvdv/fvddffv/fvddfv  

在每个数字序列后跟一串非数字字符后插入一个换行符:

sed 's/\([0-9]* [^0-9]*\) /\n/g' input

或用换行符替换非数字字符后的空格:

sed 's/\([^0-9]\) /\n/g' input

给出:

2706 abc/efe/efefe/fefe
10143 fefef/dbddf/fvfvdf/vdfvdp
8927 fvdfv/fvdv/fvdfv/fvdfv
11546 fvsddfv/fdfvdv/fvddffv/fvddfv

你可以使用 sed,

sed 's/[[:blank:]]\+\([0-9]\+\)/\n/g' file

通过grep,

grep -oP '\d+\s+\S+' file

如果你的行的格式是固定的,你可以试试这行:

cat file|xargs -n2

用你的例子测试:

kent$  cat f
2706 abc/efe/efefe/fefe 10143 fefef/dbddf/fvfvdf/vdfvdp 8927 fvdfv/fvdv/fvdfv/fvdfv 11546 fvsddfv/fdfvdv/fvddffv/fvddfv

kent$  cat f|xargs -n2 
2706 abc/efe/efefe/fefe
10143 fefef/dbddf/fvfvdf/vdfvdp
8927 fvdfv/fvdv/fvdfv/fvdfv
11546 fvsddfv/fdfvdv/fvddffv/fvddfv

使用 GNU awk 进行多字符 RS:

$ awk -v RS='\s' '{ORS=(NR%2?" ":"\n")}1' file
2706 abc/efe/efefe/fefe
10143 fefef/dbddf/fvfvdf/vdfvdp
8927 fvdfv/fvdv/fvdfv/fvdfv
11546 fvsddfv/fdfvdv/fvddffv/fvddfv

一些(大多数?)seds:

$ sed -r 's/([^ ]+ +[^ ]+) +/\n/g' file
2706 abc/efe/efefe/fefe
10143 fefef/dbddf/fvfvdf/vdfvdp
8927 fvdfv/fvdv/fvdfv/fvdfv
11546 fvsddfv/fdfvdv/fvddffv/fvddfv