我可以使用任一形式来执行该cat方法:
cat file_name
cat < file_name
Run Code Online (Sandbox Code Playgroud)
结果是一样的
然后我想以man格式执行stdin
man < file_name
Run Code Online (Sandbox Code Playgroud)
虽然file_name包含:
# file_name
cat
Run Code Online (Sandbox Code Playgroud)
但它弹出
What manual page do you want?而不是 execute man cat。
我想知道为什么cat可以接受stdin作为参数但man不能。命令行参数和stdin?之间有什么区别?
回答这个问题让我提出了另一个问题:
我认为下面的脚本做同样的事情,第二个应该快得多,因为第一个使用cat需要一遍又一遍地打开文件但第二个只打开文件一次,然后只回显一个变量:
(有关正确的代码,请参阅更新部分。)
第一的:
#!/bin/sh
for j in seq 10; do
cat input
done >> output
Run Code Online (Sandbox Code Playgroud)
第二:
#!/bin/sh
i=`cat input`
for j in seq 10; do
echo $i
done >> output
Run Code Online (Sandbox Code Playgroud)
而输入大约是 50 兆字节。
但是当我尝试第二个时,它太慢了,因为回显变量i是一个巨大的过程。我也遇到了第二个脚本的一些问题,例如输出文件的大小低于预期。
我还检查了手册页echo并cat比较了它们:
echo - 显示一行文本
cat - 连接文件并在标准输出上打印
但我没有得到区别。
所以:
i?(因为在它的手册页中
echo说它显示“一行文本”,所以我猜它只针对短变量进行了优化,而不是像 那样非常长的变量i。然而,这只是一个猜测。)echo?我用seq 10而不是`seq 10`错误的。这是编辑后的代码: …
我正在尝试重命名以splitfile[a-z]to形式命名的文件splitfile[1-26].csv,即我想重命名splitfilea为splitfile1.csv等等。
我尝试了以下命令:
mv splitfile[a-z] splitfile[1-26].csv
Run Code Online (Sandbox Code Playgroud)
但它不起作用。请帮助我,同时我正在尝试使用 for 循环。
考虑以下简单的 shell 脚本(使用pdftk):
#!/bin/sh
echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf
pdftk \
A=blank.pdf \
B=blank.pdf \
C=blank.pdf \
cat A C \
output foo.pdf
Run Code Online (Sandbox Code Playgroud)
现在,如果我注释掉一行,就会出现古怪。这是修改后的脚本。
#!/bin/sh
echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf
pdftk \
A=blank.pdf \
# B=blank.pdf \
C=blank.pdf \
cat A C \
output foo.pdf
Run Code Online (Sandbox Code Playgroud)
输出看起来像:
Done. Input errors, so no output created.
cat: A: No such file or directory
cat: C: No such file or directory
cat: output: No such file or directory …Run Code Online (Sandbox Code Playgroud) 我想使用 shell 脚本执行以下操作:(为简单起见,我对 INPUT 使用相同的数据。在实际情况下,数据随循环标签 jj 发生变化)
#!/bin/sh
for jj in `seq 100`; do
cat INPUT.file >> OUTPUT.file
done
Run Code Online (Sandbox Code Playgroud)
然而,这是非常低效的,因为打开和关闭文件都在循环中。当 INPUT.file 的大小很大时,这段代码会很慢。所以我想知道是否有办法拥有/创建一个缓冲区,比如在 C 中创建一个预先分配的变量。
我们目前正在做经典的planA。
我想知道哪个更好?
无论fileA和fileB生存,以50〜100〜大小。
假设在 Linux/mac 中的同一个 NFS 挂载中
假设这是两个文件都存在的覆盖
# planA - we do this way
mv /pathA/fileA /pathB/fileB
# planB
rm /pathB/fileB; mv /pathA/fileB /pathB/fileB
# planB1 - I think is the same as planB, but not sure
unlink /pathB/fileB; ln /pathA/fileA /pathB/fileB
Run Code Online (Sandbox Code Playgroud)