每行每组只有一条记录

时间:2019-03-24 10:23:47

标签: 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
do {
 for L21 in $(echo $L12 | cut -d " " -f 1,2 | sed 's/,/ /g')
 do
  echo $L11, $L21
 done
} < /dev/null
done 

,但无法正常工作。此命令不会显示“空”组

3 个答案:

答案 0 :(得分:3)

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

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

一个空组(aaa:)也被解析为两个字段;第一个是组名,第二个是空字符串。因此,也会打印出空组。

答案 1 :(得分:0)

请您尝试以下操作(仅通过提供的示例进行测试)。

awk -F':' '{gsub(/,/,ORS $1 ":")} 1' Input_file

OR

awk -F':' '{gsub(/,/,ORS $1 FS)} 1'  Input_file

输出如下。

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

答案 2 :(得分:-1)

您可以尝试使用sed:

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

sed -E -f script.sed infile