Rub*_*ens 18 variables bash awk
有没有办法从内部设置当前shell中的变量awk?
我想对文件进行一些处理并打印出一些数据; 因为我会读完整个文件,所以我想保存行数 - 在这种情况下,FNR.
虽然我似乎无法找到一种方法来设置一个带有FNR值的shell变量; 如果不是这样,我必须FNR从我的输出文件中读取,设置,比如说num_lines,FNR有价值.
我尝试过使用某些组合awk 'END{system(...)}',但无法管理它.有什么方法吗?
Ed *_*ton 24
$ echo "$var"
$ declare $( awk 'BEGIN{print "var=17"}' )
$ echo "$var"
17
Run Code Online (Sandbox Code Playgroud)
这就是你应该使用declare而不是eval的原因:
$ eval $( awk 'BEGIN{print "echo \"removing all of your files, ha ha ha....\""}' )
removing all of your files, ha ha ha....
$ declare $( awk 'BEGIN{print "echo \"removing all of your files\""}' )
bash: declare: `"removing': not a valid identifier
bash: declare: `files"': not a valid identifier
Run Code Online (Sandbox Code Playgroud)
请注意,在第一种情况下,eval会执行任何字符串awk打印,这可能会非常糟糕!
Ner*_*rve 24
这是另一种方式.
当,当你已经得到了,这是特别有用的值的变量在一个单一的变量,你想拆起来.例如,您有一个数据库中的值列表,您希望从中创建变量.
val="hello|beautiful|world" # assume this string comes from a database query
read a b c <<< $( echo ${val} | awk -F"|" '{print $1" "$2" "$3}' )
echo $a #hello
echo $b #beautiful
echo $c #world
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们需要'here string'即<<<,因为read命令不从管道读取而是从stdin读取
您不能将变量从子 shell 导出到其父 shell。不过,您还有其他一些选择,包括:
使用 AWK 对文件进行另一次传递以计算记录,并使用命令替换来捕获结果。例如:
FNR=$(awk 'END {print FNR}' filename)
Run Code Online (Sandbox Code Playgroud)wc -l < filename获取您的计数。