需求是根據文件的內容,將文件劃分爲多個文件
原始文件名爲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
學到的知識
- gawk中字符串的拼接,直接拼接即可,不能使用+號。
在使用+號的時候,是會出現異常的。在使用該命令的時候
gawk '{print $2 + ".txt"}' test.txt
,輸出的結果如下0 0 0 0
- shell中數組直接使用即可,不必賦初值。這個和許多編程語言都不相同
gawk '{list[$2]++} END{for (item in list){ print item, list[item];}} ' test.txt
的結果如下a 2 b 2
做一個知識型討飯的,有些閒錢的,覺得對你有用的可以捐點