我有一个文件如下
ABc def|0|0|0| 1 | 2| 9|
0 2930|0|0|0|0| 1 | 2| 9|
现在,我想用相同的分隔符拆分第一列。
输出:
ABc|def|0|0|0| 1 | 2| 9|
0|2930|0|0|0|0| 1 | 2| 9|
请帮我解决问题。
答案 0 :(得分:2)
您可以使用sed
:
$ sed 's/ /|/' file
ABc|def|0|0|0| 1 | 2| 9|
0|2930|0|0|0|0| 1 | 2| 9|
定义它的方式,它只是用|
替换第一个空格,这正是你需要的。
awk
有点长:
$ $ awk 'BEGIN{FS=OFS="|"}{split($1, a, " "); $1=a[1]"|"a[2]}1' file
ABc|def|0|0|0| 1 | 2| 9|
0|2930|0|0|0|0| 1 | 2| 9|
将输入和输出字段分隔符定义为|
后,它会根据空格分割第一个字段。然后打印回来。
答案 1 :(得分:1)
另一个awk
awk '{sub(/ /,"|")}1' file
ABc|def|0|0|0| 1 | 2| 9|
0|2930|0|0|0|0| 1 | 2| 9|
没有领先的空间,这很好。
答案 2 :(得分:0)
您说要在第一个列中替换分隔符(space-> pipe)。
可能会发生在你的第一个col中,没有空间,但在其他列中,有空格。在这种情况下,您不希望在该行上进行任何更改。同样在你的第一列中,可能会有更多空格,我想你想要将它们全部替换掉。所以我想不出更短的方法来解决这个问题。
awk -F'|' -v OFS="|" '{gsub(/ /,"|",$1)}7' file
答案 3 :(得分:-1)
sed 's/^[[:blank:]]\{1,\}/ /;/^\([^|]\{1,\}\)[[:blank:]]\{1,\}\([^|[[:blank:]]\)/ s//\1|\2/'
假设第一列为空,空白(或几个)作为分隔符,而不是另一个非空白或| 这允许这个
ABc def|0|0|0| 1 | 2| 9|
def|0|0|0| 1 | 2| 9|
ABc|def|0|0|0| 1 | 2| 9|