使用以下函数过滤文本文件并组织为新格式。
使用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
- 您可以根据需要链接管道:
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
你就会得到它有多少个字符。
- 如果某些应用程序不接受来自管道的输入,或者更容易使用多个文件...那么您始终可以将临时文件转储到临时目录中。所以你的
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 返回到该目录。