通過shell將一個文件劃分爲多個文件

需求是根據文件的內容,將文件劃分爲多個文件

原始文件名爲test.xt,文件內容如下

sort a # 3|4
sort a # 2|5
sort b # 1|2
sort b # 2|5

分割後的文件
file1

sort a # 3|4
sort a # 2|5

file2

sort b # 1|2
sort b # 2|5

解決方案

這個其實很簡單,就是遍歷每一行的時候,在把該行的內容,輸出到第二列字符對應的文件即可gawk -F' ' '{print >> $2".txt"}' test.txt,正確結果的內容就不做展示了。
此文的答案都是有問題的,答案中的語句awk '!a[$2]++{ fn="file"++c }{ print > fn }' inputfile在原文件中a、b不是排序好出現的時候,結果就是錯誤的(當然,可以對原文件按照第二列的內容排序後,再使用此語句也是可以得出正確結果的)。
例如,輸入文件修改爲如下

sort a # 3|4
sort b # 2|5
sort a # 1|2
sort b # 2|5

那麼對應的輸出爲
file1

sort a # 3|4

file2

sort b # 2|5
sort a # 1|2
sort b # 2|5

學到的知識

  1. gawk中字符串的拼接,直接拼接即可,不能使用+號。

在使用+號的時候,是會出現異常的。在使用該命令的時候gawk '{print $2 + ".txt"}' test.txt,輸出的結果如下

0
0
0
0
  1. shell中數組直接使用即可,不必賦初值。這個和許多編程語言都不相同

gawk '{list[$2]++} END{for (item in list){ print item, list[item];}} ' test.txt的結果如下

a 2
b 2

做一個知識型討飯的,有些閒錢的,覺得對你有用的可以捐點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章