我有一个任务,要将一堆文件重命名为其第 1 行第 2 列的内容(一个字符串)。这些文件没有扩展名。我还必须将 .pdb 添加为每个文件的扩展名。
到目前为止我已经写了这个但它不起作用:(
#! /bin/bash
for f in sequences/*; do
mv "$f" "($ awk 'NR==1 {print=$2}').pdb";
done
我对 Shell 脚本非常陌生,仍然不知道如何使用它。任何帮助都将不胜感激!
答案1
需要注意以下几点:
命令替换的语法
$( command )
不是($ command )
在 awk 中打印第二个字段的语法
print $2
不是print=$2
您需要将文件名作为参数传递给 awk ex。
awk 'NR==1 {print $2}' "$f"
还要注意,新文件将相对于当前目录而不是子目录创建sequences
(您的问题中没有足够的细节来知道这是否是预期的结果)。
答案2
谢谢steeldriver!这些评论很有帮助!第三个评论才是真正的问题解决者!所以这是我最后写的脚本:
#! /bin/bash
for f in $(ls); do
mv "$f" "$( awk 'NR==1 {print $2}' "$f" ).pdb";
done
如果有人有任何“更聪明”的方法,我会非常高兴听到。
谢谢!