簡體   English   中英

bash:讀取文件中的前n個條目

[英]bash: Reading first 'n' entries in a file

我有一系列非常大的單行文件,它們之間用空格分隔。 看起來像

0.993194 0.9684194 0.846847658 1.0 1.0 1.0 1.0 0.78499 0.54879564 0.9998545 ...

我想閱讀每個文件的前n個元素的第一個副本。

我可以將空格轉換為新行( cat file.txt | tr ' ' '\\n' > file2.txt ),然后cat file.txt | tr ' ' '\\n' > file2.txt讀取並將每一行保存在新文件中( head -n $n file2.txt | while read line; do echo $line >> file3.txt;done ),但這會非常慢。 (以上代碼未經測試)

如何有效地復制單行文件的前n個值?

注意:我可以復制前n個字符,即使這對應於未定義的值數量。

僅使用awk並指定所需的記錄數如何?

awk -v n=5 '{for(i=1;i<=n;i++) print $i}' file
0.993194
0.9684194
0.846847658
1.0
1.0

(或)使用printf在同一行中打印

awk -v n=5 '{for(i=1;i<=n;i++) printf "%s ",$i}' file
0.993194 0.9684194 0.846847658 1.0 1.0

(或)使用帶有POSIX兼容選項的cut-d用於設置定界符, -f 1-5用於字段1至5。

cut -d' ' -f 1-5 file
0.993194 0.9684194 0.846847658 1.0 1.0

我將在egrep使用經過精心設計的正則表達式,並帶有-o標志以使其僅輸出匹配的輸出:

egrep -e '^([0-9.]+[ ]*){3}' -o file.txt

打印輸出:

0.993194 0.9684194 0.846847658

由於grep是一個非常知名且經過高度優化的工具,因此它的效果非常好; 我只是在一個3兆字節的文本文件上進行了嘗試,並沒有比在30字節的文本文件上花費更長的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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