不使用 rm 摆脱 UNIX 重定向新创建的文件

不使用 rm 摆脱 UNIX 重定向新创建的文件

使用以下函数过滤文本文件并组织为新格式。

使用unix重定向>命令创建新文件。

我怎样才能摆脱创建所有新文件

(例如${file}_final_1.txt,${file}仅有的${pattern}.txt)

不使用命令后删除它rm

filter(){
  cat ${file}_1.txt | grep -v ${pattern} > ${file}_final_1.txt                            
  cat ${file}_1.txt | grep ${pattern} > ${file}_only_${pattern}.txt                        
  cat ${file}_only_${pattern}.txt  | nawk -F '|' '{ print $NF}' > ${pattern}_TS.txt        
  paste ${pattern}_TS.txt ${file}_only_${pattern}.txt > ${pattern}_TS_file.txt
  cat ${pattern}_TS_file.txt | grep "|${DT}|" | grep ${pattern} | sort -r | head -1 > ${file}_f.txt
  cat ${file}_f.txt >> ${file}_final_1.txt
  dos2unix ${file}_final_1.txt ${file}_final.txt
}

答案1

  1. 您可以根据需要链接管道:
  cat ${file}_1.txt | grep ${pattern} > ${file}_only_${pattern}.txt                        
  cat ${file}_only_${pattern}.txt  | nawk -F '|' '{ print $NF}' > ${pattern}_TS.txt

可以替换为

cat ${file}_1.txt | grep ${pattern} | nawk -F '|' '{ print $NF}' > ${pattern}_TS.txt

等等……当然,命令行有一个限制,但它大得离谱。这样做getconf ARG_MAX你就会得到它有多少个字符。

  1. 如果某些应用程序不接受来自管道的输入,或者更容易使用多个文件...那么您始终可以将临时文件转储到临时目录中。所以你的filter()函数可以遵循一个模式:
filter(){
   TEMP_DIR=/tmp/dir_for_this_task_`date +%s`
   mkdir $TMP_DIR
   CUR_DIR=`pwd`
   cd $TMP_DIR

   .... your code with temp files

   cd $CUR_DIR
   rm -r $TMP_DIR
}

您还可以使用pushd/popd记住当前目录并从 temp 返回到该目录。

相关内容