[英]Concatenate files
當我嘗試使用循環連接多個文件時,它將后續文件的第一行與前一個文件的最后一行連接起來。 例如,我有以下兩個文件:
File1 File2
1.234 12.11
2.345 0.00
11.567 4.56
7.890 2.34
我使用以下腳本
for i in File1 File2
do
cat $i &
done >> tmp.txt
以下是tmp.txt
樣子
1.234
2.345
11.567
7.890 12.11
0.00
4.56
2.34
這只是一個例子,它可以通過使用“Enter”鍵在vi中解決,但我有大約100個這些文件,每個文件有近50行。
你這里不需要循環。 您可以一次性直接連接文件:
cat File1 File2 >> tmp.txt
下面的腳本將循環當前dir
上的所有.txt
文件並將它們連接到temp.out
#!/bin/bash
FILES=./*.txt
for f in $FILES
do
cat $f >> temp.out
done
注意:
我已經使用您提供的示例測試了腳本,並且按預期工作。
1.234
2.345
11.567
7.890
12.11
0.00
4.56
2.34
正如其他人已經建立的那樣,你的問題是由行結尾引起的。 我建議通過awk運行你的文件來規范化它們:
awk '{ sub(/\r$/, ""); print }' File1 File2 > tmp.txt
這將從每條記錄的末尾(如果存在)中刪除回車符( \\r
,Windows樣式行結尾的一部分)。 print
將輸出記錄分隔符( ORS
,Linux上的換行符\\n
)附加到每一行。
請注意,這里絕對不需要循環。 多個文件可以作為參數傳遞給awk(或者cat就此而言,實際上這正是cat的意思)。
測試它,使用一些帶有Windows樣式行結尾的文件,並且每個文件末尾沒有換行符:
$ cat file1 file2
1.234
2.345
11.567
7.89012.11
0.00
4.56
$ awk '{ sub(/\r$/, ""); print }' file1 file2
1.234
2.345
11.567
7.890
12.11
0.00
4.56
2.34
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.