![使用 sed 和 awk 后如何不丢失文件的前两行](https://linux22.com/image/178127/%E4%BD%BF%E7%94%A8%20sed%20%E5%92%8C%20awk%20%E5%90%8E%E5%A6%82%E4%BD%95%E4%B8%8D%E4%B8%A2%E5%A4%B1%E6%96%87%E4%BB%B6%E7%9A%84%E5%89%8D%E4%B8%A4%E8%A1%8C.png)
我有以下脚本:
file="home/report.csv"
while IFS= read -r line
do
sed 's/\,/;/' > tmp.txt
done <"$file"
file2="home/tmp.txt"
while IFS= read -r line
do
awk -F. '{print $1";service" > "report_v2.csv"}' OFS=;
done <"$file2"
在第一个“While”之后,文件“tmp.txt“没有第一行”报告.csv”。然后,在第二个“While”之后,文件报告_v2.csv没有第一行tmp.txt。
因此,最后一个文件比原始文件少了两行。
这是我的文件的示例:
报告.csv
1,foo
2,pippo
3,pluto
4,davis
tmp.txt
2;pippo
3;pluto
4;davis
报告_v2.csv
3;pluto;service
4;davis;service
我需要将原始文件的前两行也保留在最后一个文件中。我能怎么做?
谢谢
答案1
欢迎来到该网站,伊拉斯莫。你可以简化一个很好的交易:
#!/bin/bash
file="report.csv"
sed 's/\,/;/g' "$file" > tmp.txt
file2="tmp.txt"
awk '{print $1";service"}' "$file2" > report_v2.csv
哪个应该有tmp.txt
产量:
1;foo
2;pippo
3;pluto
4;davis
并且应该有report_v2.csv
产量:
1;foo;service
2;pippo;service
3;pluto;service
4;davis;service
答案2
您只需使用以下命令即可获得所需的结果
awk '{gsub(",",";",$0);print $0";service"}' report.csv >> report_v2.csv
输出
1;foo;service
2;pippo;service
3;pluto;service
4;davis;service