awk - 连接两个字符串变量并分配给第三个

问题描述 投票:47回答:4

在awk中,我有2个字段:1美元和2美元。

它们都是我想要连接并分配给变量的字符串。

awk gawk
4个回答
84
投票

你可以说:

awk '{b=$1$2; print b}' file

如果您想在两者之间留一个空格,请执行以下操作:

awk '{b=$1" "$2; print b}' file

实际上使用FS是一样的,因为它默认为空格:

awk '{b=$1 FS $2; print b}' file

Test

$ cat a
hello how are you
i am fine
$ awk '{b=$1$2; print b}' a
hellohow
iam
$ awk '{b=$1 FS $2; print b}' a
hello how
i am

你可以在ideone中使用它:http://ideone.com/4u2Aip


7
投票

可以使用sprintf来完成这个:

awk '{str = sprintf("%s %s", $1, $2)} END {print str}' file

2
投票

在awk中连接字符串可以通过打印命令AWK manual page来完成,你可以做复杂的组合。在这里,我试图将16个字符更改为A并使用字符串连接:

echo CTCTCTGAAATCACTGAGCAGGAGAAAGATT | awk -v w=15 -v BA=A '{OFS=""; print substr($0, 1, w), BA, substr($0,w+2)}'
Output: CTCTCTGAAATCACTAAGCAGGAGAAAGATT

我使用substr函数来提取输入的一部分(STDIN)。我传递了一些外部参数(这里我使用的是硬编码值),通常是shell变量。在shell编程的上下文中,您可以编写-v w = $ width -v BA = $ my_charval。关键是OFS代表awk中的输出字段分隔。打印功能获取值列表并将其写入STDOUT并将其与OFS粘合。这类似于perl连接函数。

它看起来在awk中,字符串可以通过彼此相邻的打印变量连接起来:

echo xxx | awk -v a="aaa" -v b="bbb" '{ print a b $1 "string literal"}'
# will produce: aaabbbxxxstring literal

1
投票

您还可以使用空格连接多行中的字符串。

cat file.txt apple 10 oranges 22 grape 7

例1:

awk'{aggr = aggr“”$ 2} END {print aggr}'file.txt

10 22 7

例2:

awk'{aggr = aggr“,”$ 1“:”$ 2} END {print aggr}'file.txt

,苹果:10,橙子:22,葡萄:7

© www.soinside.com 2019 - 2024. All rights reserved.