Awk 删除第5列中单词之间的空格

Awk 删除第5列中单词之间的空格,awk,Awk,我有数据 cell input out type fun level AI20 A1,A2 Z comb ((A1 A2)) 2 IA2 A1,A2,A3 Z comb ((!A1 A2) A3) 3 XOR A1,A2,B1 Z comb (((A1 A2) B1) 3 IAD A1,A2,A3 Z c

我有数据

cell   input     out    type      fun            level
AI20   A1,A2      Z     comb    ((A1 A2))            2
IA2    A1,A2,A3   Z     comb    ((!A1 A2) A3)        3
XOR    A1,A2,B1   Z     comb    (((A1 A2) B1)        3
IAD    A1,A2,A3   Z     comb    (!((A1 A2) A3))      3
INV    I1         ZN    comb    (!I1)                1  
BUF  A1,A2,A3,B1  Z     comb    (!(((A1A2) A3) B1))  4
如何删除字段5(即“乐趣”列)中单词之间的空格 ,这样当我执行
列-t
时,它们就完全对齐了

我试着用

sed -r 's/[[:blank:]]+//5'

但这只会删除第5列中单词之间的第一个空格。

您可以使用带有2个或更多空格的自定义
FS

awk-F'[:blank:]{2,}'{gsub(+/,“”,$5)}1'文件|列-t

您可以使用带有2个或更多空格的自定义
FS

awk-F'[:blank:]{2,}'{gsub(+/,“”,$5)}1'文件|列-t

考虑到您想从
删除空格,您可以尝试以下操作

awk '
match($0,/\(.*\)/){
  val=substr($0,RSTART,RLENGTH)
  gsub(/ +/,"",val)
  print substr($0,1,RSTART-1) val substr($0,RSTART+RLENGTH)
  val=""
}
'  Input_file | column -t
说明:添加上述内容的详细说明

awk '                                   ##Starting awk program from here.
match($0,/\(.*\)/){                     ##using match function to match from ( to till ) here.
  val=substr($0,RSTART,RLENGTH)         ##Creating val which has sub string of matched regex value.
  gsub(/ +/,"",val)                     ##Globally substituting spaces with NULL in val here.
  print substr($0,1,RSTART-1) val substr($0,RSTART+RLENGTH)  ##Printing sub string from 1 to till just before RSTART val and rest of the line then.
  val=""                                ##Nullifying val here.
}
'  Input_file                           ##Mentioning Input_file name here.

考虑到您想从
删除空格,您可以尝试以下操作

awk '
match($0,/\(.*\)/){
  val=substr($0,RSTART,RLENGTH)
  gsub(/ +/,"",val)
  print substr($0,1,RSTART-1) val substr($0,RSTART+RLENGTH)
  val=""
}
'  Input_file | column -t
说明:添加上述内容的详细说明

awk '                                   ##Starting awk program from here.
match($0,/\(.*\)/){                     ##using match function to match from ( to till ) here.
  val=substr($0,RSTART,RLENGTH)         ##Creating val which has sub string of matched regex value.
  gsub(/ +/,"",val)                     ##Globally substituting spaces with NULL in val here.
  print substr($0,1,RSTART-1) val substr($0,RSTART+RLENGTH)  ##Printing sub string from 1 to till just before RSTART val and rest of the line then.
  val=""                                ##Nullifying val here.
}
'  Input_file                           ##Mentioning Input_file name here.
你可以试试Perl

$ perl -pe ' s/\(.*\)/($t=$&)=~tr! !!d;$t/gme ' neha2.txt
cell   input     out    type      fun            level
AI20   A1,A2      Z     comb    ((A1A2))            2
IA2    A1,A2,A3   Z     comb    ((!A1A2)A3)        3
XOR    A1,A2,B1   Z     comb    (((A1A2)B1)        3
IAD    A1,A2,A3   Z     comb    (!((A1A2)A3))      3
INV    I1         ZN    comb    (!I1)                1
BUF  A1,A2,A3,B1  Z     comb    (!(((A1A2)A3)B1))  4
$
你可以试试Perl

$ perl -pe ' s/\(.*\)/($t=$&)=~tr! !!d;$t/gme ' neha2.txt
cell   input     out    type      fun            level
AI20   A1,A2      Z     comb    ((A1A2))            2
IA2    A1,A2,A3   Z     comb    ((!A1A2)A3)        3
XOR    A1,A2,B1   Z     comb    (((A1A2)B1)        3
IAD    A1,A2,A3   Z     comb    (!((A1A2)A3))      3
INV    I1         ZN    comb    (!I1)                1
BUF  A1,A2,A3,B1  Z     comb    (!(((A1A2)A3)B1))  4
$

数据选项卡是否以其他方式分开?然后简单地用零替换所有空格。你接受了一个假设列之间总是有2个空格的答案,但我在你的问题中没有看到任何东西表明一列中不能有2个空格(特别是
fun
),或者给定行的列之间只能有1个空格。我怀疑这可能是一个适用于发布的示例的解决方案,但在将来不会适用于实际数据。你;但是,我必须告诉我们更多关于如何分隔数据中的字段的信息。数据是否以其他方式分隔?然后简单地用零替换所有空格。你接受了一个假设列之间总是有2个空格的答案,但我在你的问题中没有看到任何东西表明一列中不能有2个空格(特别是
fun
),或者给定行的列之间只能有1个空格。我怀疑这可能是一个适用于发布的示例的解决方案,但在将来不会适用于实际数据。你;不过,我必须告诉我们更多关于数据中字段的分隔情况。