簡體   English   中英

連接文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM