在awk中,我有2个字段:1美元和2美元。
它们都是我想要连接并分配给变量的字符串。
答案 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