每行每组只有一条记录
just one record per group on each line
假设我有一个名为 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
但未按预期工作。此命令不显示 'empty' 组
这对 awk 来说是一项微不足道的任务:
awk -F '[:,]' -v OFS=':' '{ for(i=2;i<=NF;++i) print , $i }' file
一个空组(aaa:
)也被解析成两个字段;第一个是组名,第二个是空字符串。所以空组也被打印出来。
能否请您尝试以下(仅使用提供的样本进行测试)。
awk -F':' '{gsub(/,/,ORS ":")} 1' Input_file
或
awk -F':' '{gsub(/,/,ORS FS)} 1' Input_file
输出如下。
aaa:
bbb:11
bbb:22
ccc:
ddd:44
ddd:11
你可以试试 sed :
cat script.sed
:A
s/(^[^:]*:)([^,]*),(.*)/\n/
tA
sed -E -f script.sed infile
假设我有一个名为 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
但未按预期工作。此命令不显示 'empty' 组
这对 awk 来说是一项微不足道的任务:
awk -F '[:,]' -v OFS=':' '{ for(i=2;i<=NF;++i) print , $i }' file
一个空组(aaa:
)也被解析成两个字段;第一个是组名,第二个是空字符串。所以空组也被打印出来。
能否请您尝试以下(仅使用提供的样本进行测试)。
awk -F':' '{gsub(/,/,ORS ":")} 1' Input_file
或
awk -F':' '{gsub(/,/,ORS FS)} 1' Input_file
输出如下。
aaa:
bbb:11
bbb:22
ccc:
ddd:44
ddd:11
你可以试试 sed :
cat script.sed
:A
s/(^[^:]*:)([^,]*),(.*)/\n/
tA
sed -E -f script.sed infile