将逗号分隔的行变成 1 列

将逗号分隔的行变成 1 列

我有一个来自 /etc/group 的用户列表,我想将该行格式化为一列,我只需要用户。因此,如果一个字段如下所示:

bob,john,jane,sam,joyce

那么我希望它看起来像这样

bob
john
jane
sam
joyce

我知道如何做相反的事情但不知道如何做这种类型。

答案1

你可以用 sed 来做到这一点:

sed 's/,/\n/g'

这将,用换行符替换所有出现的 。g使 sed 替换一行中的所有出现而不是仅仅替换第一个。

答案2

使用您建议的标签来回答:

重击:

$ IFS=, read -a names <<< "bob,john,jane,sam,joyce"
$ printf "%s\n" "${names[@]}"
bob
john
jane
sam
joyce

awk:

$ echo "bob,john,jane,sam,joyce" | awk -F, -v OFS="\n" '{$1=$1; print}'
bob
john
jane
sam
joyce

$1=$1位是 awk 习语,用于使用输出字段分隔符重写当前记录,除非修改了某些字段,否则不会发生这种情况。

答案3

您可以通过查找和替换来执行此操作vim

:%s/,/\r/g

问题...

答案4

如果你想使用 awk(类似于使用 AWK 打印所有字段,并以 OFS 分隔):

echo "bob,john,jane,sam,joyce" | awk  'BEGIN {FS=","; OFS="\n"} {$1=$1; print $0}'

相关内容