用逗号替换行尾,并将括号放在sed / awk中

时间:2018-04-10 13:37:02

标签: awk sed text-processing

我正在尝试使用以下格式处理文件的内容:

this1,EUR 
that2,USD
other3,GBP

采用以下格式:

this1(EUR),that2(USD),other3(GBP)

结果应该是一行。

到目前为止,我已经提出了这个可以正常运行的命令电路:

cat myfile | sed -e 's/,/\(/g' | sed -e 's/$/\)/g' | tr '\n' , | awk '{print substr($0, 0, length($0)- 1)}'

是否有一种更简单的方法可以通过awk命令执行相同的操作?

4 个答案:

答案 0 :(得分:3)

另一个awk:

$ awk -F, '{ printf "%s%s(%s)", c, $1, $2; c = ","} END { print ""}' file

1(EUR),2(美元),3(GBP)

答案 1 :(得分:2)

关注awk可能对您有帮助。

awk -F, '{val=val?val OFS $1"("$2")":$1"("$2")"} END{print val}' OFS=,  Input_file

答案 2 :(得分:2)

使用分隔符及gsub

进行操作
$ awk 'BEGIN{RS="";ORS=")\n"}{gsub(/,/,"(");gsub(/\n/,"),")}1' file
this1(EUR),that2(USD),other3(GBP)

说明:

$ awk '
BEGIN {
    RS=""            # record ends in an empty line, not newline
    ORS=")\n"        # the last )
}
{
    gsub(/,/,"(")    # replace commas with (
    gsub(/\n/,"),")  # and newlines with ),
}1' file             # output

答案 3 :(得分:0)

使用paste+sed

$ # paste -s will combine all input lines to single line
$ seq 3 | paste -sd,
1,2,3

$ paste -sd, ip.txt
this1,EUR,that2,USD,other3,GBP
$ # post processing to get desired format
$ paste -sd, ip.txt | sed -E 's/,([^,]*)(,?)/(\1)\2/g'
this1(EUR),that2(USD),other3(GBP)