cat
我使用该命令将多个数据文件附加到一个数据文件中。如何将该单个文件值分配到新文件中?
我正在使用命令:
cat file1 file2 file3 > Newfile.txt
AnotherFile=`cat Newfile.txt`
sort $AnotherFile | uniq -c
它显示错误,例如无法打开另一个文件如何将此新文件值分配到另一个文件中?
cat
我使用该命令将多个数据文件附加到一个数据文件中。如何将该单个文件值分配到新文件中?
我正在使用命令:
cat file1 file2 file3 > Newfile.txt
AnotherFile=`cat Newfile.txt`
sort $AnotherFile | uniq -c
它显示错误,例如无法打开另一个文件如何将此新文件值分配到另一个文件中?
好吧,最简单的方法可能是cp
:
cat file1 file2 file3 > Newfile.txt
cp Newfile.txt AnotherFile.txt
如果做不到这一点,您可以使用:
cat file1 file2 file3 > Newfile.txt
AnotherFile=$(cat Newfile.txt)
echo "$AnotherFile" > AnotherFile.txt
原来的问题echo "$AnotherFile"
是第三行;修改后的问题已sort $AnotherFile | uniq -c
作为第三行。
假设sort $AnotherFile
不是对通过连接原始文件创建的列表中提到的文件的所有内容进行排序(即,假设file1
,file2
和file3
不只包含文件名列表),那么目标是对找到的行进行排序和计数在源文件中。
整个工作可以在一个命令行中完成:
cat file1 file2 file3 | tee Newfile.txt | sort | uniq -c
或者(更常见的是):
cat file1 file2 file3 | tee Newfile.txt | sort | uniq -c | sort -n
它按频率递增的顺序列出了行。
如果您确实想对 , 中列出的文件的内容进行排序,file1
但只列出每个文件的内容一次,则:file2
file3
cat file1 file2 file3 | tee Newfile.txt | sort -u | xargs sort | sort | uniq -c
连续三个与排序相关的命令看起来很奇怪,但每个步骤都有理由。sort -u
确保每个文件名都列出一次。将xargs sort
标准输入上的文件名列表转换为sort
命令行上的文件名列表。其输出是生成的每批文件的排序数据xargs
。xargs
如果不需要sort
多次运行的文件很少,那么下面的纯文本sort
是多余的。但是,如果xargs
必须运行sort
不止一次,那么最终排序必须处理这样一个事实,即由 生产的第二批生产的第一行xargs sort
可能在生产的第一批生产的最后一行之前xargs sort
。
这成为基于原始文件中数据知识的判断调用。如果文件足够小以至于xargs
不需要运行多个sort
命令,请省略最后的sort
. 启发式方法是“如果源文件的大小总和小于最大命令行参数列表,则不包括额外的排序”。
您可能可以一口气做到这一点:
# Write to two files at once. Both files have a constantly varying
# content until cat is finished.
cat file1 file2 file3 | tee Newfile.txt> Anotherfile.txt
# Save the output filename, just in case you need it later
filename="Anotherfile.txt"
# This reads the contents of Newfile into a variable called AnotherText
AnotherText=`cat Newfile.txt`
# This is the same as "cat Newfile.txt"
echo "$AnotherText"
# This saves AnotherText into Anotherfile.txt
echo "$AnotherText" > Anotherfile.txt
# This too, using cp and the saved name above
cp Newfile.txt "$filename"
如果您想一次性创建第二个文件,这是一种常见的模式:
# During this process the contents of tmpfile.tmp is constantly changing
{ slow process creating text } > tmpfile.tmp
# Very quickly create a complete Anotherfile.txt
mv tmpfile.tmp Anotherfile.txt
制作文件并在附加模式下重定向。
touch Newfile.txt
cat files* >> Newfile.txt