使用 awk linux 提取子字符串

使用 awk linux 提取子字符串

我有包含以下内容的文件:

Text1 , Text11  : APC signal 0 , prev=7
Text2 , Text22  : APC signal 1 , prev=0
Text3 , Text33  : APC signal 0 , prev=1
Text4 , Text44  : APC signal 1 , prev=0
Text5 , Text55  : APC signal 0 , prev=1
Text6 , Text66  : APC signal 1 , prev=0

我想提取第一列和第三列,但只是第二列的子字符串(“:”之后的第二部分):

我想要的结果:

Text1 ,  APC signal 0 , prev=7
Text2 ,  APC signal 1 , prev=0
Text3 ,  APC signal 0 , prev=1
Text4 ,  APC signal 1 , prev=0
Text5 ,  APC signal 0 , prev=1
Text6 ,  APC signal 1 , prev=0

答案1

使用sed

sed 's/, [^:]*:/, /' file

这将搜索以逗号和空格 ( ,) 开头的文本,后跟尽可能多的非冒号 ( [^:]*),然后是冒号本身 ( :)。然后用逗号和空格 ( ,) 替换它以获得所需的输出:

Text1 ,  APC signal 0 , prev=7
Text2 ,  APC signal 1 , prev=0
Text3 ,  APC signal 0 , prev=1
Text4 ,  APC signal 1 , prev=0
Text5 ,  APC signal 0 , prev=1
Text6 ,  APC signal 1 , prev=0

如果您实际上不希望第一个逗号后显示两个空格,请将第二次出现的逗号空格 ( ,) 更改为单个逗号 ( ,)。

答案2

使用awk

$ awk -F, '{sub(/.*:/, "", $2); }1' OFS="," file
Text1 , APC signal 0 , prev=7
Text2 , APC signal 1 , prev=0
Text3 , APC signal 0 , prev=1
Text4 , APC signal 1 , prev=0
Text5 , APC signal 0 , prev=1
Text6 , APC signal 1 , prev=0

内置awk功能工作原理为 sub(regexp, replacement [, target]).

答案3

像这样使用:

$ awk -F' , | : ' -vOFS=' , ' '{print $1, $3, $4}' file
-------8<------------------
Text1 , APC signal 0 , prev=7
Text2 , APC signal 1 , prev=0
Text3 , APC signal 0 , prev=1
Text4 , APC signal 1 , prev=0
Text5 , APC signal 0 , prev=1
Text6 , APC signal 1 , prev=0

相关内容