Unix:使用另一个文件的文件名
一个基本的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}
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"