对于每个主题,我都有一个文件夹,每个任务(gram、plaus和sem)有两个文件(.json和.tsv),每个主题总共有6个文件。每对.tsv/.json文件除了文件扩展名外都有相同的名称。例如,一个主题的文件夹可能包含:xxx.tsv,xxx. json,yyy.tsv,yyy. json,zzz.tsv,zzz. json.
我想查看每个.json文件,看看它是否包含字符串“Gram”、“Plaus”或“Sem”,并将相应的.tsv文件重命名为在找到的文件扩展名之前包含_Gram、_Plaus或_Sem。现在,我的代码(在更改到主题文件夹后)如下所示:
find -type f -name "*_regressors.json" -print0 | while IFS= read -r -d '' filename
do
if [[grep -q 'Sem' "$filename"]]; then
sem_name="${filename%.*}"
mv ${sem_name}.tsv ${sem_name}_sem.tsv
fi
if [[grep -q 'Plaus' "$filename"]]; then
plaus_name="${filename%.*}"
mv ${plaus_name}.tsv ${plaus_name}_plaus.tsv
fi
if [[grep -q 'Gram' "$filename"]]; then
gram_name="${filename%.*}"
mv ${gram_name}.tsv ${gram_name}_gram.tsv
fi
done
我想知道awk命令是否能更好地工作?我是bash和unix脚本的新手,所以任何想法都非常感谢!
2条答案
按热度按时间von4xj4u1#
在这种情况下,使用
awk
而不是grep
确实有意义:但是如果不进行解析而尝试匹配JSON文件中的文字字符串,可能会产生意外的结果,
h6my8fg22#
请您尝试以下操作:
head
命令选择第一个匹配的行,以防有多个匹配。(这可能是想多了。)echo
放在mv
之前并运行。