删除数组bash中值之间的冒号

时间:2016-05-30 08:56:20

标签: linux bash awk

我有档案:

name name1 name2 name3 name4 name[n]
value1 A:A B:B C:C D:D E:E
value2 A:A B:B C:C D:D E:E
value[n] A:A B:B C:C D:D E:E

我需要输出

 name name1 name2 name3 name4 name[n]
 value1 AA BB CC DD EE
 value2 AA BB CC DD EE
 value[n] AA BB CC DD EE

只需删除值之间的冒号即可。我会尝试类似的东西:

awk '{split($2,arr1,/:/); print arr1[1]arr1[2]}' file

这给了我$ 2列。我不需要awk解决方案。

3 个答案:

答案 0 :(得分:3)

问题是只删除字符冒号(:),因此避免了对我没有要求的复杂性导致:

cat file_with_colons | tr -d ':'

或者@andlrc当然在注释中指出(如果没有其他进程/管道需要):

tr -d ':' < file_with_colons

从我系统的手册页:

TR(1)                     BSD General Commands Manual                        TR(1)

NAME
     tr -- translate characters

SYNOPSIS
     tr [-Ccsu] string1 string2
     tr [-Ccu] -d string1
     tr [-Ccu] -s string1
     tr [-Ccu] -ds string1 string2

DESCRIPTION
     The tr utility copies the standard input to the standard output with substitution or deletion of selected characters.

     The following options are available:

# ... 8< - -   
     -d      Delete characters in string1 from the input.
# - - >8 ...

答案 1 :(得分:1)

您可以简单地使用sed。

sed 's/\([A-Z]\):\([A-Z]\)/\1\2/g' file
  • \(pattern\)捕获组,捕获与模式匹配的所有字符。因此,第一个捕获组\([A-Z]\)捕获在:之前存在的大写字母,同样第二组捕获以下字母。

  • \1反向引用第一个捕获组..

答案 2 :(得分:1)

awk '{gsub(/:/,"")}1' file

name name1 name2 name3 name4 name[n]
value1 AA BB CC DD EE
value2 AA BB CC DD EE
value[n] AA BB CC DD EE