Linux Shell,Awk:按列合并2个可变数据

时间:2017-07-06 09:26:02

标签: linux bash awk

左侧部分数据(在变量中),如:

 echo "$lpart"

 "2017-07-03 13:39:5", "-39dB", "7c:e9:d3:f1:61:55"
 "2017-07-03 13:39:5", "-39dB", "7c:e9:d3:f1:61:55"
 "2017-07-03 13:39:5", "-39dB", "7c:e9:d3:f1:61:55"
 "2017-07-03 13:39:5", "-37dB", "7c:e9:d3:f1:61:55"

正确的部分数据(在变量中),如:

echo "$rpart"     

"qhy2"
"qhy2"
"Apple Setup"
"qhy2"

我想按列合并2个数据,它是:

 "2017-07-03 13:39:5", "-39dB", "7c:e9:d3:f1:61:55"  "qhy2"
 "2017-07-03 13:39:5", "-39dB", "7c:e9:d3:f1:61:55"  "qhy2"
 "2017-07-03 13:39:5", "-39dB", "7c:e9:d3:f1:61:55"  "Apple Setup"
 "2017-07-03 13:39:5", "-37dB", "7c:e9:d3:f1:61:55"  "qhy2"

此请求与帖子how to combine two variable column-by-column in bash相同,但我的busybox不支持粘贴命令。 我试过了这些命令:

 awk 'BEGIN{print ARGV[1], ARGV[2]}' "$lpart"  "$rpart"
 awk -v awk_lpart="$lpart" -v awk_rpart="$rpart" 'BEGIN{print awk_lpart awk_rpart }'

那些将按行合并..

你能否告诉我如何才能达到要求?谢谢。

2 个答案:

答案 0 :(得分:1)

使用awk你可以这样做:

awk 'NR==FNR {a[FNR]=$1; next} {print $0, a[FNR]}' <(echo "$rpart") <(echo "$lpart")
"2017-07-03 13:39:5", "-39dB", "7c:e9:d3:f1:61:55" "qhy2"
"2017-07-03 13:39:5", "-39dB", "7c:e9:d3:f1:61:55" "qhy2"
"2017-07-03 13:39:5", "-39dB", "7c:e9:d3:f1:61:55" "Apple
"2017-07-03 13:39:5", "-37dB", "7c:e9:d3:f1:61:55" "qhy2"

答案 1 :(得分:1)

以您的一次尝试为基础:

awk -v awk_lpart="$lpart" -v awk_rpart="$rpart" 'BEGIN{
    split(awk_lpart,lp,/\n/)
    split(awk_rpart,rp,/\n/)
    for (i=1; i in lp; i++) {
        print lp[i], rp[i]
    }
}'
"2017-07-03 13:39:5", "-39dB", "7c:e9:d3:f1:61:55" "qhy2"
"2017-07-03 13:39:5", "-39dB", "7c:e9:d3:f1:61:55" "qhy2"
"2017-07-03 13:39:5", "-39dB", "7c:e9:d3:f1:61:55" "Apple Setup"
"2017-07-03 13:39:5", "-37dB", "7c:e9:d3:f1:61:55" "qhy2"

这适用于任何UNIX机器上任何shell中的任何awk。