Linux
如何提取以相同的前 2 個字元開頭的行,然後輸出到單獨的文件?
我有一個非常大的文本列表,需要一種方法來提取以相同 2 個字元開頭的行,然後將這些行保存到以這 2 個字元命名的單獨文件中。
範例列表:
abWEye7kgw7 abff34ZSrZf abke8mzMyma b2R5mPZGbCb b2zhhCeLZzZ b2q2T5rkACp k9ekzbc8nUh k9QzXBUrNT7 k92RtdXntZ3 vrTtR9GmbWG vraVM9QXWzY vrME9QnksBf
期望的輸出:
ab* > ab.txt b2* > b2.txt k9* > k9.txt vr* > vr.txt
該列表相當大,並且有很多前 2 個字元組合。
$ awk '{ f = substr($0,1,2) ".txt"; print >f }' file.in $ ls ab.txt b2.txt file.in k9.txt vr.txt $ cat ab.txt abWEye7kgw7 abff34ZSrZf abke8mzMyma
這顯然也可以在 shell 中解決,但
awk
更適合解析文本文件。選擇substr()
輸入文件中每行的前兩個字元,並將其分配給變數f
並.txt
添加到末尾。會將目前f
。我相信您可以取消
f
變數並substr()
直接在 之後使用表達式>
,但不能在awk
我在 OpenBSD 上使用的實現中使用(這可能是一個錯誤)。如果兩個第一個字元的不同組合的數量太多,您可能會遇到打開文件過多的問題。
以下變體將解決這個問題:
awk '{ f = substr($0,1,2) ".txt"; print >>f; close(f) }' file.in