我已经很久没用过 grep 或 sed 了,但我认为这是可以做到的。如何获取 csv 并垂直格式化,同时保留/复制前几列。
Ex.
Input:
A, 1, 2, 3
B, 1, 2, 3
C, 1, 2, 3
Output:
A, 1
A, 2
A, 3
B, 1
B, 2
B, 3
C, 1
C, 2
C, 3
答案1
您可以使用sed
或者的某些版本来实现grep
,但是,使用awk
可以非常优雅地表达您想要实现的目标:
#!/bin/sh
awk -F, '
BEGIN {
OFS=","
}
{
for (i=2; i<=NF; i++) {
print $1, $i
}
}
' <<EOF
A, 1, 2, 3
B, 1, 2, 3
C, 1, 2, 3
EOF
如果您希望脚本采用文件名或标准输入,请将“此处文档”(从文件到<<
文件末尾的所有内容)替换为:
"$@"
答案2
一个sed
办法。
sed -r ':a;s/([A-Z],)( [0-9]),( [0-9])/\1\2\n\1\3/;ta' <<<'A, 1, 2, 3
B, 1, 2, 3
C, 1, 2, 3'
A, 1
A, 2
A, 3
B, 1
B, 2
B, 3
C, 1
C, 2
C, 3