如何实时更改txt文件

时间:2015-10-07 02:18:32

标签: bash if-statement for-loop awk sed

我需要有关bash shell的帮助 我希望使用info.txt实时更新snmptrap.txt中的内容,例如result.txt。

内容实时添加snmptrap.txt行尾,所以我想在result.txt上添加更改内容

smtptrap.txt:

2015/10/07  "General" 10.2 - ZBXTRAP 10.1 hello1 AAA05056 
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 hello2 hello2 AAA05056 
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 hello3 AAA05056 
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 hello4 AAA05056
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 hello5 AAA05056
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 test1 AAA05056
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 test2 AAA05056
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 test3 AAA05056
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 test4 hello2 AAA05056
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 test5 hello2 AAA05056
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 hello1 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 hello2 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 hello3 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 hello4 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 hello5 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 test1 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 test2 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 test3 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 test4 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 test5 AAA05010 
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 hello1 AAA05000
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 hello2 AAA05000 
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 hello3 AAA05000 
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 hello4 AAA05000 
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 hello5 AAA05000 
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 test1 AAA05000 
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 test2 AAA05000
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 test3 AAA05000
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 test4 AAA05000
2015/10/07  "General" 10.2 - ZBXTRAP 10.1 test5 AAA05000

我希望更改匹配使用info.txt info.txt:

100.300;AAA05056
100.200;AAA05010
100.100;AAA05000

result.txt应如下所示:

2015/10/07  "General" 10.2 - ZBXTRAP 100.300 hello1 AAA05056 
2015/10/07  "General" 10.2 - ZBXTRAP 100.300 hello2 hello2 AAA05056 
2015/10/07  "General" 10.2 - ZBXTRAP 100.300 hello3 AAA05056 
2015/10/07  "General" 10.2 - ZBXTRAP 100.300 hello4 AAA05056
2015/10/07  "General" 10.2 - ZBXTRAP 100.300 hello5 AAA05056
2015/10/07  "General" 10.2 - ZBXTRAP 100.300 test1 AAA05056
2015/10/07  "General" 10.2 - ZBXTRAP 100.300 test2 AAA05056
2015/10/07  "General" 10.2 - ZBXTRAP 100.300 test3 AAA05056
2015/10/07  "General" 10.2 - ZBXTRAP 100.300 test4 hello2 AAA05056
2015/10/07  "General" 10.2 - ZBXTRAP 100.300 test5 hello2 AAA05056
2015/10/07  "General" 10.2 - ZBXTRAP 100.200 hello1 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 100.200 hello2 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 100.200 hello3 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 100.200 hello4 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 100.200 hello5 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 100.200 test1 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 100.200 test2 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 100.200 test3 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 100.200 test4 AAA05010
2015/10/07  "General" 10.2 - ZBXTRAP 100.200 test5 AAA05010 
2015/10/07  "General" 10.2 - ZBXTRAP 100.100 hello1 AAA05000
2015/10/07  "General" 10.2 - ZBXTRAP 100.100 hello2 AAA05000 
2015/10/07  "General" 10.2 - ZBXTRAP 100.100 hello3 AAA05000 
2015/10/07  "General" 10.2 - ZBXTRAP 100.100 hello4 AAA05000 
2015/10/07  "General" 10.2 - ZBXTRAP 100.100 hello5 AAA05000 
2015/10/07  "General" 10.2 - ZBXTRAP 100.100 test1 AAA05000 
2015/10/07  "General" 10.2 - ZBXTRAP 100.100 test2 AAA05000
2015/10/07  "General" 10.2 - ZBXTRAP 100.100 test3 AAA05000
2015/10/07  "General" 10.2 - ZBXTRAP 100.100 test4 AAA05000
2015/10/07  "General" 10.2 - ZBXTRAP 100.100 test5 AAA05000

2 个答案:

答案 0 :(得分:0)

基于您的示例

 $ awk -F"[; ]" 'NR==FNR{a[$2]=$1;next}  $9 in a{$7=a[$9]}1' file2 file1       

将完成这项工作,但是您的输出与提供的映射不匹配,请检查。

捕获输入文件更新的一种方法是使用tail -f。例如。

 $ awk ... file2 <(tail -f file1) >> output &

将启动后台进程。您可以通过

监控输出中的更新
 $ tail -f output

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed -r 's#^([^;]*);(.*)#/\2/s/\\S+/\1/6#' file2 | sed -rf - file1

这会将第二个文件转换为sed脚本,用于转换第一个文件。

第二个文件的第二个字段用作查找,第二个文件的第一个字段用作第一个文件中第六个字段的替换。