好的,我在一个文件夹中有很多文件,它们的名称中有字符串“ $varname .txt”`:
for file in find output/ -name "*$varname*.txt" -type f; do echo $file; done
...
现在这些文件都有两行和 9 列。我想将第 2 行第 9 列的内容添加到他们的 filname 的末尾(就在 之前.txt
)。
所以我知道如何打印所有这些文件的 in cell(2, 9) 的值:
find output/ -name "*$varname*.txt" -type f -exec awk -F' ' 'NR==2{print $9}' {} \;
我挣扎的是如何将该字符串作为这些文件名中扩展名之前的最后一件事
您需要捕获该值并用它构造新的文件名。
我在
-exec
指令中调用了一个 shell 脚本,向它传递了几个文件名(用-exec ... +
而不是-exec ... \;
)尾随的“sh”变为 $0,文件名变为 $1、$2 等
这是一个GNU
parallel
方法:这会将包含重命名命令的零分隔文件列表传递给
parallel
该列表 -echo
如果它做正确的事情,则删除。parallel
带有方便的替换字符串,{}
被(当前处理的)输入文件名,{.}
没有扩展名的输入文件名替换,{=perl expression=}
你可以运行任何perl
可以做的事情,比如这里的替换。您的命令的输出awk
只需使用Command Substitution添加即可。