如何将三行合并为一行,用逗号分隔

如何将三行合并为一行,用逗号分隔

如何翻转此文本:

                                             From: "anonymous" <sip:[email protected]>;tag=1c1969267918
                                             Call-ID: [email protected]
                                             Max-Forwards: 70
                                             From: "anonymous" <sip:[email protected]>;tag=1c6447025742
                                             Call-ID: [email protected]
                                             Max-Forwards: 70

进入这个:

From: "anonymous" <sip:[email protected]>;tag=1c1969267918, Call-ID: [email protected], Max-Forwards: 70
From: "anonymous" <sip:[email protected]>;tag=1c6447025742, Call-ID: [email protected], Max-Forwards: 70

答案1

除非预期输出中逗号后面的单个空格非常重要:

$ sed 's/^[[:blank:]]*//' file | paste -d, - - -
From: "anonymous" <sip:[email protected]>;tag=1c1969267918,Call-ID: [email protected],Max-Forwards: 70
From: "anonymous" <sip:[email protected]>;tag=1c6447025742,Call-ID: [email protected],Max-Forwards: 70

首先用于sed删除输入文件中每行上的初始空格,然后使用paste, 将结果行分布在三列中,并以逗号作为分隔符。

答案2

awk

awk '{sub(/^[[:blank:]]*/, ""); ORS = NR % 3 ? ", " : "\n"; print}' < your-file

答案3

如果你想在 shell 中执行此操作:

n=0
while read x; do
    echo -n "$x"
    n=$((n+1))
    if [ $((n%3)) = 0 ]; then
        echo
    else
        echo -n ', '
    fi
 done < inputfile

这会一行一行地读取,并进行计数。每第三行(该$((n%3))部分计算模数)输出一个换行符,否则输出逗号(和示例中的空格)。这echo -n可以防止echo添加换行符本身。

答案4

我相信可以做得更好。但效果很好。

gnu sed:第一个表达式删除前导空格。第二个表达式连接以下行匹配/From:/并删除前导空格。第二个表达式连接以下行匹配/Call-ID:/并删除前导空格。

sed -e 's/^[[:blank:]]*//' \
    -e  '/From:/N;s/\n[[:blank:]]*/, /' \
    -e  '/Call-ID:/N;s/\n[[:blank:]]*/, /'

相关内容