如何用文件首行首个单词扩展原文件名?
解决方案
你遇到的问题是因为head命令将文件内容通过管道传给awk时,awk的FILENAME变量指向的是标准输入(-),而非原文件名。以下两种简便方法可解决该问题:
方法一:管道外拼接文件名
直接将原文件名与awk输出的首单词拼接,无需让awk处理文件名:
for fname in lrccas1 do cp "$fname" "$(head -1 -q "$fname" | awk '{print $1}')_$fname" done
示例中用_分隔首单词与原文件名,你可根据需求替换为其他分隔符(如.或直接拼接)。
方法二:将原文件名传递给awk
通过-v选项把原文件名作为变量传入awk,让其直接完成拼接输出:
for fname in lrccas1 do cp "$fname" "$(head -1 -q "$fname" | awk -v fn="$fname" '{print $1 "_" fn}')" done
若不需要分隔符,修改为print $1 fn即可。
另外建议给变量添加双引号,避免文件名包含空格或特殊字符时出现异常。
内容的提问来源于stack exchange,提问作者Svend Bager
相关产品推荐
相关产品推荐

