我有一个脚本,在用空格划分后用数字打印日期" "并将其保存到文件中,该文件名为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
我应该如何将变量添加到每行的末尾?我将继续交互变量,因为我正在制作一个"图表"但我只需要知道如何将图表添加到我文件中每行的末尾。
答案 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
这将给你
另一种方式是
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