当我为输出文件“print>”/tmp/outputfile.txt"nfile}'“提供绝对路径时,下面命令分割文件工作正常:
awk -v size=$(wc -l < inputfile.txt) -v perc=0.2 '{nfile = int(NR/(size*perc)); if(nfile >= 1/perc){nfile--; } print > "/tmp/outputfile.txt"nfile}' inputfile.txt
但是当我用变量删除绝对路径时它不起作用,我 尝试过以下命令 -
printenv |grep tempdir
tempdir=/tmp
awk -v size=$(wc -l < inputfile.txt) -v perc=0.2 '{nfile = int(NR/(size*perc)); if(nfile >= 1/perc){nfile--; } print > ENVIRON["tempdir"]"outputfile.txt"nfile}' inputfile.txt
awk -v size=$(wc -l < inputfile.txt) -v perc=0.2 -v tempdir="/tmp" '{nfile = int(NR/(size*perc)); if(nfile >= 1/perc){nfile--; } print > "tempdir/outputfile.txt"nfile}' inputfile.txt
awk -v size=$(wc -l < inputfile.txt) -v perc=0.2 '{nfile = int(NR/(size*perc)); if(nfile >= 1/perc){nfile--; } print > "$tempdir/outputfile.txt"nfile}' inputfile.txt
答案 0 :(得分:1)
ENVIRON仅适用于在命令行上导出或设置的变量。在任何情况下,只需使用-v
使用相同名称的shell变量的值初始化名为tempdir
的awk变量:
awk -v tempdir="$tempdir" ... '{... print > (tempdir"outputfile.txt"nfile)}' inputfile.txt
您之前已经创建了变量,但之后将其粘贴在字符串中,因此它不再是变量而是文字文本。
我在产生输出文件名的串联周围添加了parens,因为在输出重定向右侧的任何表达式都是括号,这是所有awk版本的可移植性所必需的。
答案 1 :(得分:1)
最好使用awk -v somevar="someval"'{....}'
,同时您可以访问ENVIRON
,如下所示
$ tempdir="/tmp/somefolder" awk 'BEGIN{print ENVIRON["tempdir"]}'
/tmp/somefolder
ENVIRON
是包含所有导出环境变量的关联数组,例如,如果要查看系统中导出的所有变量,可以使用下面的命令,但在当前上下文中-v tempdir="somedir/somepath"
适合最好的。
$ awk 'BEGIN{for (i in ENVIRON)print i,ENVIRON[i]}'
IM_CONFIG_PHASE 1
DBUS_SESSION_BUS_ADDRESS unix:abstract=/tmp/dbus-5xGteFNyU3
SHLVL 1
XDG_SESSION_PATH /org/freedesktop/DisplayManager/Session0
GNOME_DESKTOP_SESSION_ID this-is-deprecated
PWD /home/akshay
...
...
...
CLUTTER_IM_MODULE = xim
XDG_SEAT = seat0
XMODIFIERS = @im=ibus
WINDOWID = 69206026
答案 2 :(得分:0)
最初的解决方案现在正在运行(引用的小错误)
print > "tempdir/outputfile.txt"nfile ####old
print > tempdir"/outputfile.txt"nfile ####new
awk -v size=$(wc -l < inputfile.txt) -v perc=0.2 -v tempdir="/tmp" '{nfile = int(NR/(size*perc)); if(nfile >= 1/perc){nfile--; } print > tempdir"/outputfile.txt"nfile}' inputfile.txt
从Akshay Hegde解决方案中获取想法后的另一种解决方案 -
awk -v size=$(wc -l < inputfile.txt) -v perc=0.2 -v tempdir="/tmp/" '{nfile = int(NR/(size*perc)); if(nfile >= 1/perc){nfile--; } print > ENVIRON["tempdir"]"outputfile.txt"nfile}' inputfile.txt