Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix:使用另一个文件的文件名_Unix_Awk - Fatal编程技术网

Unix:使用另一个文件的文件名

Unix:使用另一个文件的文件名,unix,awk,Unix,Awk,一个基本的Unix问题 我有一个计算增量文件中记录数的脚本 awk '{ n++ } END { if(n >= 1000) print "${completeFile}"; else print "${deltaFile}"; }' <${deltaFile} >${fileToUse} awk'{ n++ }结束{ 如果(n>=1000)打印“${completeFile}”;否则打印“${deltaFile}”; }“${fileToUse}

一个基本的Unix问题

我有一个计算增量文件中记录数的脚本

awk '{ 
    n++ 
  } END {
    if(n >= 1000) print "${completeFile}"; else print "${deltaFile}";
  }' <${deltaFile} >${fileToUse}
awk'{
n++
}结束{
如果(n>=1000)打印“${completeFile}”;否则打印“${deltaFile}”;
}“${fileToUse}
然后,根据IF条件,我希望处理适当的文件:

cut -c2-11 < ${fileToUse}
cut-c2-11<${fileToUse}
但是如何将文件内容用作文件名本身?
如果要做任何调整,请随意

提前感谢
干杯

Simon

将文件本身由变量标识的内容用作文件名(如要求)

或者将shell变量导出为env vars(如果它们还没有),并像这样访问它们

 awk '{n++} END{if(n>=1000) print ENVIRON["completeFile"]; else print ENVIRON["deltaFile"]}' <"$deltaFile"

什么是
${completeFile}
${completeFile}
${deltaFile}
只是实际文件的变量名。我的想法是我有一个预处理器比较这个月的completeFile和上个月的completeFile。该比较的输出是deltaFile。通常它是空的,但是如果deltaFile大于completeFile的xx%(大于等于1000步),那么我只想通过FileUse将completeFile带到下一个进程。。。否则,我将通过FileToUse将deltaFile带到下一个进程您可能不需要deltaFile,也不需要您所说的大多数步骤。让awk将这个月的completeFile与上个月的completeFile进行比较并从中得出结论可能是有意义的。您的问题应包括简明、可测试的样本输入(即completeFiIe版本)和预期输出,以便我们可以帮助您。这感觉很像一个XY问题。一个奇妙的回答。。。非常感谢Dave花时间如此彻底地回复。缺少的关键部分是从
${fileToUse}
“$(cat$fileToUse)”
,这使得它的功能非常完善。你的附加评论非常精彩,我已经将它们合并在一起,以简化整个声明。再次感谢
read -rdX var <$filetouse; cut -c2-11 < "${var%?}"
// where X is a character that doesn't occur in the filename
// maybe something like $'\x1f' 
 awk -vf="$completeFile" -vd="$deltaFile" '{n++} END{if(n>=1000)print f; else print d}' <"$deltaFile"`
 # the " around $var can be omitted if the value contains no whitespace and no glob chars
 # people _often_ but not always choose filenames that satisfy this
 # and they must not contain backslash in any case
 awk '{n++} END{if(n>=1000) print ENVIRON["completeFile"]; else print ENVIRON["deltaFile"]}' <"$deltaFile"
 awk -vf=... -vd=... 'END{if(NR>=1000)print f;else print d}' <...
 awk -vf=... -vd=... 'END{print (NR>=1000?f:d)}' <...
awk -vf="$completeFile" 'END{print (NR>=1000?f:FILENAME)}' "$deltaFile" # no < 
 cut -c2-11 <"$( awk -vf="$completeFile" -'END{print (NR>=1000?f:FILENAME)}' "$deltaFile")"
 if [ $(wc -l <"$deltaFile") -ge 1000 ]; then c="$completeFile"; else c="$deltaFile"; fi
 cut -c2-11 <"$c"