Bash Linux从文件的每一行获取数据

Bash Linux从文件的每一行获取数据,bash,Bash,我有一个包含许多(~2k)行的文件,类似于: 117 VALID|AUTHEN tcp:10.92.163.5:64127 uniqueID=nwCelerra .... 991 VALID|AUTHEN tcp:10.19.16.21:58332 uniqueID=smUNIX 我只需要IP地址(上面显示的是10.19.16.21)和uniqueID的值(上面显示的是smUNIX) 我能够接近: cat t.txt|cut -f2- -d':' 10.22.36.

我有一个包含许多(~2k)行的文件,类似于:

117   VALID|AUTHEN    tcp:10.92.163.5:64127   uniqueID=nwCelerra
....
991   VALID|AUTHEN    tcp:10.19.16.21:58332   uniqueID=smUNIX
我只需要IP地址(上面显示的是10.19.16.21)和uniqueID的值(上面显示的是smUNIX)

我能够接近:

cat t.txt|cut -f2- -d':'
10.22.36.69:46474       uniqueID=smwUNIX
...
我在Linux上使用
bash

使用awk:

awk '{split($3,a,":"); split($4,b,"="); print a[2] " " b[2]}'
默认情况下,如果在空格上拆分,则可以使用一些额外的代码拆分子字段

更新: 更容易覆盖默认分隔符:

awk -F '[:=]' '{print $2 " "$4}'
使用awk:

awk '{split($3,a,":"); split($4,b,"="); print a[2] " " b[2]}'
默认情况下,如果在空格上拆分,则可以使用一些额外的代码拆分子字段

更新: 更容易覆盖默认分隔符:

awk -F '[:=]' '{print $2 " "$4}'
使用grep和sed:

grep -oP "^\d+   [A-Z]+\|[A-Z]+    \w+:\K(.*)" | sed "s/   uniqueID=/ /g"
产出:

10.92.163.5:64127 nwCelerra
10.19.16.21:58332 smUNIX
使用grep和sed:

grep -oP "^\d+   [A-Z]+\|[A-Z]+    \w+:\K(.*)" | sed "s/   uniqueID=/ /g"
产出:

10.92.163.5:64127 nwCelerra
10.19.16.21:58332 smUNIX