linux shell 將多行檔案轉換為一行

2021-07-02 17:45:19 字數 962 閱讀 3150



1. 採用awk

awk begin'' file

說明:awk預設將記錄分隔符(record separator即rs)設定為\n,此行**將rs設定為eof(檔案結束),也就是把檔案視為乙個記錄,然後通過gsub函式將\n替換成空格,最後輸出。

2. 採用sed

sed ':a ; n;s/\n/ / ; t a ; ' file

說明:sed預設只按行處理,n可以讓其讀入下一行,再對\n進行替換,這樣就可以將兩行並做一行。但是怎麼將所有行並作一行呢?可以採用sed的跳轉功能。:a 在**開始處設定乙個標記a,在**執行到結尾處時利用跳轉命令t a重新跳轉到標號a處,重新執行**,這樣就可以遞迴的將所有行合併成一行。

3. cat file | xargs

說明:這可能是最簡單的一種方式。

this manual page documents the gnu version of xargs. xargs reads argu-

ments from the standard input, delimited by blanks (which can be pro-

tected with double or single quotes or a backslash) or newlines

上面是man手冊對xargs的說明。其實xargs就是對shell命令列引數限制做的乙個擴充套件。

這條命令的含義也很簡單,將file中的內容作為引數傳給x程式

如果用echo作為x程式,則命令為:

cat file | xargs echo

此命令和cat file | xargs 行為一致,因為xargs的預設行為就是列印輸出。

unix的一些工具設計很巧妙,每一項工具僅專注於完成乙個功能。往往組合起來就能實現很強大的功能。2年前剛剛工作的時候非常喜歡玩弄各種工具,拼湊完成運維的任務。和**完成的功能一樣,但卻能順手拈來,省掉了冗長的程式**。

linux shell 將多行檔案轉換為一行

說實話,雖然對shell程式設計包括awk有所了解,但是對sed的多行與一行的處理還是不甚理解,在網上蒐羅了一篇文章覺得還不錯,記錄一下 今天乙個工程師問我,怎麼將乙個檔案中的多行轉換成一行。我給出了如下三種方法 1.採用awk awk begin file 說明 awk預設將記錄分隔符 recor...

linux shell 將多行檔案轉換為一行

今天乙個工程師問我,怎麼將乙個檔案中的多行轉換成一行。我給出了如下三種方法 1.採用awk awk begin file 說明 awk預設將記錄分隔符 record separator即rs 設定為 n,此行 將rs設定為eof 檔案結束 也就是把檔案視為乙個記錄,然後通過gsub函式將 n替換成空...

fgets讀取多行檔案 檔案操作

include include includetypedef struct data void test01 if data2.name null int main int argc,char ar 總結 前提就是指標變數 作為 結構體的成員淺拷貝 兩個結構體變數 中的 指標成員 指向 同一塊堆區空...