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

时间:2014-11-19 23:20:29

标签: awk gawk

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

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

4 个答案:

答案 0 :(得分:80)

你可以说:

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

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

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

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

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

测试

$ 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

答案 1 :(得分:7)

可以使用sprintf来完成此任务:

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

答案 2 :(得分: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

答案 3 :(得分:1)

您还可以使用空格将多行字符串连接起来。

  

cat file.txt   苹果10   橘子22   葡萄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