我有一個制表符分隔的 .txt 檔案,它有 4 行和 4 列。我想從 txt 檔案中提取數字(整數、十進制數和科學記數法)。數字在第 2-4 行和第 2-4 列(第一行是標題,第一列是行名)。檔案內容粘貼如下:
component sigma h2 h2_se
G -5.55758e-19 -0.0964725 26.3887
GxE 6.13144e-18 1.09647 26.3651
noise 0 0 0
這是所需的輸出,由于對此輸出的進一步處理,我希望\n在末尾附加換行符。
-5.55758e-19 -0.0964725 26.3887 6.13144e-18 1.09647 26.3651 0 0 0
任何幫助是極大的贊賞!
下面是我試過的一些代碼,它沒有產生我想要的:
grep -o '0.[[:digit:]]*' myfile
grep -o '[[:digit:]]*' myfile
================================================== ==
這是對我有用的代碼,非常感謝@tink!
awk 'NR>1 {printf "%s %s %s ", $2,$3,$4}END{printf "\n"}' myfile
uj5u.com熱心網友回復:
$ awk 'NR>1{$1=""; out=out $0} END{$0=out; $1=$1; print}' file
-5.55758e-19 -0.0964725 26.3887 6.13144e-18 1.09647 26.3651 0 0 0
uj5u.com熱心網友回復:
$ cut -f2- < file | tail -n 2 | paste -s - | tr '\t' ' '
-5.55758e-19 -0.0964725 26.3887 6.13144e-18 1.09647 26.3651 0 0 0
uj5u.com熱心網友回復:
以下grep提取所有整數或實數詞:
$ grep -owE '[- ]?[0-9]*([.][0-9]*([Ee][- ][0-9] )?)?' file | tr '\n' ' '
這只是由于輸入檔案的性質而起作用。
一種健壯的方式,將是 Ed Morton在這里提出的 awk 程式
uj5u.com熱心網友回復:
這是對我有用的代碼,非常感謝@tink!在\n加入用于下一步驟的處理。
awk 'NR>1 {printf "%s %s %s ", $2,$3,$4}END{printf "\n"}' myfile
對于沒有尾隨空格的輸出,請使用
awk 'NR>1 {printf "%s %s %s ", $2,$3,$4}END{printf ""}' myfile
uj5u.com熱心網友回復:
我將AWK按照以下方式使用 GNU完成此任務,讓file.txt內容成為
component sigma h2 h2_se
G -5.55758e-19 -0.0964725 26.3887
GxE 6.13144e-18 1.09647 26.3651
noise 0 0 0
與欄位分隔單\t然后
awk 'BEGIN{ORS=""}NR>1{$1="";print}' file.txt
輸出
-5.55758e-19 -0.0964725 26.3887 6.13144e-18 1.09647 26.3651 0 0 0
說明:我通知 GNUAWK使用空字串作為輸出行分隔符 ( ORS) 然后對于第一行之后的每一行,我將第一個欄位設定為空字串和print這樣改變的行。請注意,輸出字串有前導空格并且末尾沒有換行符,如果您需要有換行符 add END{print "\n"}。
(在 GNU Awk 5.0.1 中測驗)
或者,您可以通過管道linux傳輸一些實用程式以獲得類似的效果,如下所示
tail -3 file.txt | cut -f 2,3,4 | tr '\n\t' ' '
輸出
-5.55758e-19 -0.0964725 26.3887 6.13144e-18 1.09647 26.3651 0 0 0
說明:獲取最后 3 行,tail然后獲取列2,3,4,cut然后使用 將換行符更改為空格和制表符tr。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/354302.html
上一篇:如何匹配網址但不包含點
