Awk 每行每组只记录一条

Awk 每行每组只记录一条,awk,ksh,Awk,Ksh,假设我有一个名为groups.txt的文件,其中包含: aaa: bbb:11,22 ccc: ddd:44,11 我需要编写一个ksh命令/脚本来显示每个对应组的每条记录,只显示一行。 预期结果: aaa: bbb:11 bbb:22 ccc: ddd:44 ddd:11 任何建议都是非常受欢迎的 我已经试过: cat group | cut -d ":" -f 1,4| tr '[a-z]' '[A-Z]' | sed 's/:/ /g' | while read -r L11 L12

假设我有一个名为groups.txt的文件,其中包含:

aaa:
bbb:11,22
ccc:
ddd:44,11
我需要编写一个ksh命令/脚本来显示每个对应组的每条记录,只显示一行。 预期结果:

aaa:
bbb:11
bbb:22
ccc:
ddd:44
ddd:11
任何建议都是非常受欢迎的

我已经试过:

cat group | cut -d ":" -f 1,4| tr '[a-z]' '[A-Z]' |  sed 's/:/ /g' | while read -r L11 L12
do {
 for L21 in $(echo $L12 | cut -d " " -f 1,2 | sed 's/,/ /g')
 do
  echo $L11, $L21
 done
} < /dev/null
done 
cat组| cut-d:“-f1,4 | tr'[a-z]'[a-z]'| sed's/://g'|读时-r L11 L12
做{
对于L21,单位为美元(echo$L12 | cut-d”“-f1,2 | sed's/,//g')
做
回声$L11,$L21
完成
}

但是没有如预期的那样工作。此命令不显示“空”组

对于awk来说,这是一项微不足道的任务:

awk -F '[:,]' -v OFS=':' '{ for(i=2;i<=NF;++i) print $1, $i }' file

awk-F'[:,]'-vofs=':''{for(i=2;i对于awk来说,这是一项微不足道的任务:

awk -F '[:,]' -v OFS=':' '{ for(i=2;i<=NF;++i) print $1, $i }' file

awk-F'[:,]'-vofs=':''{for(i=2;i请尝试以下内容(仅使用提供的样本进行测试)

输出如下

aaa:
bbb:11
bbb:22
ccc:
ddd:44
ddd:11

请尝试以下内容(仅使用提供的样品进行测试)

输出如下

aaa:
bbb:11
bbb:22
ccc:
ddd:44
ddd:11
您可以尝试使用sed:

cat script.sed 
:A
  s/(^[^:]*:)([^,]*),(.*)/\1\2\n\1\3/
tA

sed -E -f script.sed infile
您可以尝试使用sed:

cat script.sed 
:A
  s/(^[^:]*:)([^,]*),(.*)/\1\2\n\1\3/
tA

sed -E -f script.sed infile

如果
$1
包含反向引用(例如
&
),则该方法将失败。如果您考虑将输入数据用作regexp或替换文本的一部分,请务必格外小心-由于这种隐蔽的边缘情况,几乎总是错误的方法。如果
$1
包含反向引用(例如
&
),则该方法将失败。如果您正在考虑将输入数据用作regexp或替换文本的一部分,请务必格外小心-由于像这样隐蔽的边缘情况,这种方法几乎总是错误的。