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

2021-09-26 05:12:15 字數 888 閱讀 4244

今天乙個工程師問我,怎麼將乙個檔案中的多行轉換成一行。

我給出了如下三種方法:

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的預設行為就是列印輸出。

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替換成空格,最後輸出。2.採用sed sed a n s n t a file 說明...

fgets讀取多行檔案 檔案操作

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