如何将每个2列组合在一起并更改它们之间的分隔符类型?

时间:2014-12-06 22:37:25

标签: shell awk sed

输入:

echo "1021,fra,1022,eng,1023,qad" | sed or awk ...

预期产出:

1021-fra,1022-eng,1023-gad

4 个答案:

答案 0 :(得分:3)

echo "1021,fra,1022,eng,1023,qad" |sed 's/\([^,][^,]*\),\([^,][^,]*\)/\1-\2/g'
1021-fra,1022-eng,1023-qad

答案 1 :(得分:2)

由GNU sed

echo "1021,fra,1022,eng,1023,qad"  |sed -r 's/([^,]+),([^,]+)/\1-\2/g'

答案 2 :(得分:1)

这是一种方法,有点作弊:

echo "1021,fra,1022,eng,1023,qad" | sed -e 's/,\([a-z]\)/-\1/g'

也就是说,将每个逗号替换为带有连字符后跟该字母的字母。

如果它有帮助,这里的另一个版本作弊有点不同:

echo "1021,fra,1022,eng,1023,qad" | sed -e 's/\([0-9]\),/\1-/g'

即,将每个数字替换为后跟带有该数字和连字符的逗号。

答案 3 :(得分:1)

以下是awk版本:

echo "1021,fra,1022,eng,1023,qad" | awk -F, '{for (i=1;i<NF;i++) printf "%s%s",$i,(i%2?"-":",");print $NF}'
1021-fra,1022-eng,1023-qad