将变量添加到每行的末尾

时间:2016-12-21 17:59:13

标签: linux bash scripting

我有一个脚本,在用空格划分后用数字打印日期" "并将其保存到文件中,该文件名为data.txt,这是他的内容:

21/12/16 18:50 345.44 Mbits/s
21/12/16 18:52 141.59 Mbits/s
21/12/16 18:54 85.52 Mbits/s

这是我的第二个脚本

#!/bin/bash

for fn in 'cat data.txt'; do

Speed="$(awk 'BEGIN{FS=" "}{print $3}' Project2.txt)"
example ="this is an example"
done

此脚本能够提取数字" 345.44" " 141.59" " 85.52"从文件。但现在我想添加"示例"添加每行的结尾,如

21/12/16 18:50 345.44 Mbits/s example
21/12/16 18:52 141.59 Mbits/s example
21/12/16 18:54 85.52 Mbits/s example

我应该如何将变量添加到每行的末尾?我将继续交互变量,因为我正在制作一个"图表"但我只需要知道如何将图表添加到我文件中每行的末尾。

4 个答案:

答案 0 :(得分:0)

awk 'BEGIN{FS=" "}{print $3}' filename

FS选择字段分隔符,在您的情况下是空格 然后你选择字段" 3"

您可以将输出保存到数组

array=$(awk 'BEGIN{FS=" "}{print $3}' filename)

然后迭代它。

要添加一个变量,请使用-v选项在awk中声明它:

awk -v var=example 'BEGIN{FS=" "}{print $3 " " var}' filename

这将给你

enter image description here

另一种方式是

var='example'

awk  'BEGIN{FS=" "}{print $3   " "  "'"$var"'" }' filename

答案 1 :(得分:0)

awk -F " " '{stars=sprintf("%*s", $3, ""); gsub(//, "*", stars); printf("%s %s\n", $0, stars)}' filename

您可以执行算术运算,例如3美元的除法,以缩放您想要查看的星数。

注意:使用awk时,printf / gsub组合可能是可变重复字符的唯一方法。

编辑:您更改了原始问题的要求。但这更容易。

awk -F " " '{printf("%s %d\n", $0, $3)}' filename

编辑:因为要求再次改变了......

awk -F " " '{IntSpeed=sprintf("%d", $3); printf("%s %d\n", $0, IntSpeed)}' filename

此时,您可以将所有这些想法结合起来,最终制作图表。

答案 2 :(得分:0)

#! /bin/bash  
declare -A speed  tab #Associative table

ilg=0
while read line  
do
   set $line  
   speed[$ilg]=$3
   ilg=$(( ilg + 1 ))
done < data.txt

# your calcul 
l=${#speed[@]}  #length of speed
for (( ilg=0; ilg<$l; ilg++ ))
do
  Speed=${speed[$ilg]}
  tab[$ilg]=${Speed%[.]*}
done

ilg=0
while read line  
do
   echo "$line ${tab[$ilg]}"
   ilg=$(( ilg + 1 ))
done < data.txt

测试:

21/12/16 18:50 345.44 Mbits/s 345
21/12/16 18:52 141.59 Mbits/s 141
21/12/16 18:54 85.52 Mbits/s 85

答案 3 :(得分:0)

您可以尝试以下操作,我希望每次您的Input_file与第一次POST中显示的示例相同。

awk -F'[ |/:.]' '{print $0 OFS $6}' Input_file

输出如下。

21/12/16 18:50 345.44 Mbits/s 345
21/12/16 18:52 141.59 Mbits/s 141
21/12/16 18:54 85.52 Mbits/s 85