使用awk将cli命令输出到文件以获取列

时间:2013-02-13 15:28:39

标签: bash awk sh

我想在某个点记录RSSI,该点距离路由器。距离将是用户输入,输出文件名也是如此,因此用户将键入以下内容:

sh rssi.sh output.csv 20

其中output.csv是csv我要追加结果,20是距离

目前rssi.sh看起来像:

#!/bin/bash

RSSI_CSV=$1
DISTANCE=$2
RSSI=$(iwconfig wlan0 | awk -F'[ =]+' '/Signal level/ {print $7}\')

awk '{print $DISTANCE, $RSSI}' > $RSSI_CSV 

这会根据用户输入创建RSSI_CSV,但不会在其中打印所需的值,我不知道为什么。

我想它是

awk '{print $DISTANCE, $RSSI}' > $RSSI_CSV 

不能用作回波RSSI或回波DISTANCE都将值输出到屏幕。我正在使用awk,因为我想要列,所以我可以输出一个csv文件,也许有更好的方法?

2 个答案:

答案 0 :(得分:1)

您的awk需要使用-v选项传递变量,并使用BEGIN块,因为没有给出任何输入,因此存在一些问题。另请注意,单个>附加,但会覆盖该文件。如需追加,您需要>>

awk -vD=$DISTANCE -vR=$RSSI 'BEGIN{print D,R}' >> $RSSI_CSV 

演示:

$ DISTANCE=20

$ RSSI=$(iwconfig wlan0 | awk -F'[ =]+' '/Signal level/ {print $7}')

$ awk -vD=$DISTANCE -vR=$RSSI 'BEGIN{print D,R}' 
20 -47

注意:我相信你想要逗号分隔值:

$ awk -vD=$DISTANCE -vR=$RSSI 'BEGIN{print D","R}' 
20,-47

但是,awk对于打印变量来说是过度的,只需使用旧的echo

$ echo "$DISTANCE,$RSSI"
20,-47

答案 1 :(得分:0)

您不需要awk来打印两个shell变量。

printf "%s,%s\n" "$DISTANCE" "$RSSI" >> "$RSSI_CSV"