【发布时间】:2015-01-17 16:25:41
【问题描述】:
在 awk 中,我有 2 个字段:$1 和 $2。
它们都是我想要连接并分配给变量的字符串。
【问题讨论】:
-
awk 如果我的输入是:Marty Pants,输出应该是一样的。不能改变FS
在 awk 中,我有 2 个字段:$1 和 $2。
它们都是我想要连接并分配给变量的字符串。
【问题讨论】:
只需使用var = var1 var2,它就会自动连接变量var1 和var2:
awk '{new_var=$1$2; print new_var}' file
您可以在两者之间放置一个空格:
awk '{new_var=$1" "$2; print new_var}' file
其实和使用FS是一样的,因为默认是空格:
awk '{new_var=$1 FS $2; print new_var}' file
$ cat file
hello how are you
i am fine
$ awk '{new_var=$1$2; print new_var}' file
hellohow
iam
$ awk '{new_var=$1 FS $2; print new_var}' file
hello how
i am
您可以在 ideone 中使用它:http://ideone.com/4u2Aip
【讨论】:
awk '{print $1$2}' file
sprintf() 可能会对你有所帮助。
可以使用sprintf 来完成此操作:
awk '{str = sprintf("%s %s", $1, $2)} END {print str}' file
【讨论】:
pwd | awk -F/ '{for (i=1; i<NF; ++i) str=sprintf("%s/%s",str,$i)}END{print str}' 的完美解决方案
您还可以使用空格连接多行中的字符串。
$ cat file.txt
apple 10
oranges 22
grapes 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
, apple:10, oranges:22, grapes:7
【讨论】:
awk中的字符串拼接可以通过打印命令AWK manual page来完成,还可以进行复杂的组合。在这里,我试图将 16 char 更改为 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
【讨论】: