微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 在每行文件前打印文件名

我有很多文本文件,我想在linux中创建一个bash脚本,在每行文件中打印文件名.例如,我有文件lenovo.txt,我希望文件中的每一行都以lenovo.txt开头.

我尝试为此做一个“for”但是没有用.

for i in *.txt
do
        awk '{print '$i' $0}' /var/SambaShare/$i > /var/SambaShare/new_$i
done

谢谢!

解决方法:

它不起作用,因为你需要使用-v选项将$i传递给awk.但是你也可以在awk中使用FILENAME内置变量:

ls *txt
file.txt    file2.txt

cat *txt
A
B
C
A2
B2
C2

for i in *txt; do 
awk '{print FILENAME,$0}' $i; 
done
file.txt A
file.txt B
file.txt C
file2.txt A2
file2.txt B2
file2.txt C2

重定向到新文件

for i in *txt; do 
awk '{print FILENAME,$0}' $i > ${i%.txt}_new.txt; 
done

至于你的更正版本:

for i in *.txt
do
        awk -v i=$i '{print i,$0}' $i > new_$i
done

希望这可以帮助.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐