我正在尝试使用以下格式处理文件的内容:
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命令执行相同的操作?
答案 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)