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

use*_*926 55 awk gawk

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

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

fed*_*qui 92

你可以说:

awk '{b=$1$2; print b}' file
Run Code Online (Sandbox Code Playgroud)

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

awk '{b=$1" "$2; print b}' file
Run Code Online (Sandbox Code Playgroud)

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

awk '{b=$1 FS $2; print b}' file
Run Code Online (Sandbox Code Playgroud)

测试

$ 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
Run Code Online (Sandbox Code Playgroud)

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

  • 或者只是'awk'{print $ 1 $ 2}'file` (4认同)
  • ...对于我们这些尚未了解何时使用“$”变量的人来说,即使对于赋值右侧的自定义中间变量也不要使用它(与内置“$1”等不同) (2认同)

Hon*_*Liu 12

可以sprintf用来完成这个:

awk '{str = sprintf("%s %s", $1, $2)} END {print str}' file
Run Code Online (Sandbox Code Playgroud)


Kem*_*hou 5

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

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

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

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

echo xxx | awk -v a="aaa" -v b="bbb" '{ print a b $1 "string literal"}'
# will produce: aaabbbxxxstring literal
Run Code Online (Sandbox Code Playgroud)


小智 5

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

$ cat file.txt
apple 10
oranges 22
grapes 7
Run Code Online (Sandbox Code Playgroud)

示例 1:

awk '{aggr=aggr " " $2} END {print aggr}' file.txt
10 22 7
Run Code Online (Sandbox Code Playgroud)

示例 2:

awk '{aggr=aggr ", " $1 ":" $2} END {print aggr}' file.txt
, apple:10, oranges:22, grapes:7
Run Code Online (Sandbox Code Playgroud)