我可以使用以下命令确定输入文件的大小:
ls -l employee.txt | awk '{print $5}'
这将仅打印文件大小。
我可以打印文件的内容,忽略文件的第一行和最后一行(指标题和预告片)。以下命令对我有用:
sed '1d;$d' employee.txt
但是如何以这样的方式组合这两个命令,它应该确定忽略标题和尾部的文件的大小。同时,不应从输入文件中删除标题和预告片。
我能够通过编写两个语句来实现这一点。一个是将整个文件复制到除头文件和预告片之外的新文件中,然后在新文件上执行ls,如下所示:
sed '1d;$d' employee.txt > employee1.txt
ls -l employee1.txt
我尝试在下面的单个声明中进行,但无济于事。任何输入都会有所帮助。
sed '1d;$d' employee.txt | ls -l employee.txt
ls -l `sed '1d;$d' employee.txt`
sed '1d;$d' employee.txt |xargs ls -l $1
答案 0 :(得分:2)
Don't parse ls
获取文件大小。要获取磁盘上文件的大小,请使用stat -c '%s' filename
,或者要获取字符流的大小,请使用wc -c
。
# size of employee.txt
stat -c '%s' employee.txt
# size without header and footer
sed '1d;$d' employee.txt | wc -c
答案 1 :(得分:0)
你可以通过
完成cat someFilename.txt | wc -c
第一个命令输出文件的内容,第二个命令计算输入的大小。
这不会删除标题和预告片。为此你可以像以前一样使用'sed'命令。
答案 2 :(得分:0)
我认为你以错误的方式接近这个。
我的建议:使用" stat"查询总文件大小命令:
stat --format=%s employee.txt
您可以将结果存储在这样的变量中(假设您正在运行Bash shell):
fileSize="$(stat --format=%s employee.txt)"
现在你检索第一行(再次假设Bash shell):
firstLine="$(head -n 1 employee.txt)"
接下来检索最后一行(再次假设Bash shell):
lastLine="$(tail -n 1 employee.txt)"
现在计算第一行和最后一行的大小,并从文件大小中减去它:
echo "Total adjusted size is:" $((fileSize - ${#firstLine} - ${#lastLine}))