linux之>>追加多行變成一行,wc -l統計條數不變
阿新 • • 發佈:2018-12-11
應用場景: 需要將一條資料的a.txt插入到40G的檔案result.txt末尾,result.txt總共有268566151條資料。因此使用追加>>命令,追加後使用wc -l統計行數
出現的問題: 將資料追加到末尾後(cat a.txt >>result.txt),使用tail -f result.txt檢視資料已插入成功,但wc -l發現條數始終為268566151,而後又執行了幾次追加命令,發現追加的所有資料都在一行,wc -l發現條數始終為268566151,awk ‘END{print NR}’ result.txt為268566152.
問題分析:
1.a.txt是從window拷貝的,使用cat -E 發現數據的結尾不是$。
2.wc -l是實際是統計換行符(\n)個數,由於追加進來的資料的換行符不是\n,所以始終為268566151
3.追加>>追加資料時,若上一行的換行符不是\n,不會重新開行,會追加到上一行,也就是追加多條變成一條的原因
4.awk ‘END{print NR}’ result.txt輸出的是當前文字最後一行的行號,在追加第一條資料時,前一條資料的換行符為\n,因此會重新開行,但後面追加的資料的換行符不是\n,因此不會重新開行,所以行號會加1,命令輸出的結果為268566152。
解決方法:
1.修改a.txt的換行符後,使用cat -E,發現數據的結尾是$。
2.執行一次追加命令,使用wc -l result.txt命令,條數為268566152,awk ‘END{print NR}’ result.txt,條數為268566152。