導航:首頁 > 凈水問答 > awk過濾第一行

awk過濾第一行

發布時間:2020-12-24 07:45:48

A. 在awk中怎麼把一行中的字元串後的\n去掉

awk '{printf $0}' xxx
printf默認不換行的,print是默認換行輸出,你用不換行的輸出就去掉了最後的一個\n了

B. 如何使用 awk 和正則表達式過濾文本或文件中的字元串

正則表達式的特點
正則表達式由以下內容組合而成:
普通字元,例如空格、下劃線、A-Z、a-z、0-9。
可以擴展為普通字元的元字元,它們包括:
(.)
它匹配除了換行符外的任何單個字元。
(*)
它匹配零個或多個在其之前緊挨著的字元。
[ character(s) ]
它匹配任何由其中的字元/字元集指定的字元,你可以使用連字元(-)代表字元區間,例如 [a-f]、[1-5]等。
^
它匹配文件中一行的開頭。
$
它匹配文件中一行的結尾。
\
這是一個轉義字元。
你必須使用類似 awk 這樣的文本過濾工具來過濾文本。你還可以把 awk 自身當作一個編程語言。但由於這個指南的適用范圍是關於使用 awk 的,我會按照一個簡單的命令行過濾工具來介紹它。
awk 的一般語法如下:
# awk 'script' filename
此處
'script'
是一個由 awk 可以理解並應用於 filename 的命令集合。
它通過讀取文件中的給定行,復制該行的內容並在該行上執行腳本的方式工作。這個過程會在該文件中的所有行上重復。
該腳本
'script'
中內容的格式是
'/pattern/ action'
,其中
pattern
是一個正則表達式,而
action
是當 awk 在該行中找到此模式時應當執行的動作。
如何在 Linux 中使用 awk 過濾工具
在下面的例子中,我們將聚焦於之前討論過的元字元。
一個使用 awk 的簡單示例:
下面的例子列印文件 /etc/hosts 中的所有行,因為沒有指定任何的模式。
# awk '//{print}' /etc/hosts
awk 列印文件中的所有行
結合模式使用 awk
在下面的示例中,指定了模式
localhost
,因此 awk 將匹配文件
/etc/hosts
中有
localhost
的那些行。
# awk '/localhost/{print}' /etc/hosts
awk 列印文件中匹配模式的行
在 awk 模式中使用通配符 (.)
在下面的例子中,符號
(.)
將匹配包含 loc、localhost、localnet 的字元串。
這里的正則表達式的意思是匹配 l一個字元c。
# awk '/l.c/{print}' /etc/hosts
使用 awk 列印文件中匹配模式的字元串
在 awk 模式中使用字元 (*)
在下面的例子中,將匹配包含 localhost、localnet、lines, capable 的字元串。
# awk '/l*c/{print}' /etc/localhost
使用 awk 匹配文件中的字元串
你可能也意識到
(*)
將會嘗試匹配它可能檢測到的最長的匹配。
讓我們看一看可以證明這一點的例子,正則表達式
t*t
的意思是在下面的行中匹配以
t
開始和
t
結束的字元串:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint.
當你使用模式
/t*t/
時,會得到如下可能的結果:
this is t
this is tecmint
this is tecmint, where you get t
this is tecmint, where you get the best good t
this is tecmint, where you get the best good tutorials, how t
this is tecmint, where you get the best good tutorials, how tos, guides, t
this is tecmint, where you get the best good tutorials, how tos, guides, tecmint

/t*t/
中的通配符
(*)
將使得 awk 選擇匹配的最後一項:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
結合集合 [ character(s) ] 使用 awk
以集合 [al1] 為例,awk 將匹配文件 /etc/hosts 中所有包含字元 a 或 l 或 1 的字元串。
# awk '/[al1]/{print}' /etc/hosts
使用 awk 列印文件中匹配的字元
下一個例子匹配以
K

k
開始頭,後面跟著一個
T
的字元串:
# awk '/[Kk]T/{print}' /etc/hosts
使用 awk 列印文件中匹配的字元
以范圍的方式指定字元
awk 所能理解的字元:
[0-9]
代表一個單獨的數字
[a-z]
代表一個單獨的小寫字母
[A-Z]
代表一個單獨的大寫字母
[a-zA-Z]
代表一個單獨的字母
[a-zA-Z 0-9]
代表一個單獨的字母或數字
讓我們看看下面的例子:
# awk '/[0-9]/{print}' /etc/hosts
使用 awk 列印文件中匹配的數字
在上面的例子中,文件 /etc/hosts 中的所有行都至少包含一個單獨的數字 [0-9]。
結合元字元 (^) 使用 awk
在下面的例子中,它匹配所有以給定模式開頭的行:
# awk '/^fe/{print}' /etc/hosts
# awk '/^ff/{print}' /etc/hosts
使用 awk 列印與模式匹配的行
結合元字元 ($) 使用 awk
它將匹配所有以給定模式結尾的行:
# awk '/ab$/{print}' /etc/hosts
# awk '/ost$/{print}' /etc/hosts
# awk '/rs$/{print}' /etc/hosts
使用 awk 列印與模式匹配的字元串
結合轉義字元 (\) 使用 awk
它允許你將該轉義字元後面的字元作為文字,即理解為其字面的意思。
在下面的例子中,第一個命令列印出文件中的所有行,第二個命令中我想匹配具有 $25.00 的一行,但我並未使用轉義字元,因而沒有列印出任何內容。
第三個命令是正確的,因為一個這里使用了一個轉義字元以轉義 $,以將其識別為 '$'(而非元字元)。
# awk '//{print}' deals.txt
# awk '/$25.00/{print}' deals.txt
# awk '/\$25.00/{print}' deals.txt

C. linux sed awk命令結合匹配符 根據第二行內容,替換第一行內容 可以寫成shell腳本

我也給個思路吧 —— 用sed根據地址范圍截取文件內容,用Here documents方法添加新的多行內容,然後重組文件。具體步驟如下:

1)截取test.xml文件起始行到<abcdef>行,保存到tmp文件;
2)將要添加的內容根據變數值展開,附加寫入tmp文件;
3)截取test.xml文件</abcdef>行到結束行,附加寫入tmp文件。
4)移動tmp文件覆蓋test.xml文件。

代碼:
12345678910111213#!/bin/sh$hostnames="host1,host2,host3 ..."$paragraph="many_strings"sed -n '1,/^<abcdef>/p' test.xml >tmpcat <<EOF >>tmpfor hname in `echo "$hostnames" | tr ',' ' '`do insert $hname insert $paragraphdoneEOFsed -n '/^<\/abcdef>/,$p' test.xml >>tmpmv tmp test.xml
注意:
1) for a in b 結構中,b集合里的內容必需要空格分隔。所以我這里做了轉換,用tr命令將逗號分隔改為了空格分隔。
2)第二個EOF必需頂格寫,前面不能有空格。

D. linux 中可以用cut提取某一行的某一列數據嗎 如果可以怎麼做

可以。
cut -d" " -f2 filename
意思就是我以空格為列的分隔符,提取第二列

或者使用awk
awk '{print $2}' filename
awk默認以空格為分隔符,列印第二列

E. 用SELL或awk將每行的第三到第七的字元取出來,並進行排序

由於抄 UNIX/Linux 的 SHELL 是一個功能十分強大的腳本語言,幾乎可以依靠 SHELL 編程完成人們想到的各種功能。因此使用 UNIX/Linux 下面的 SHELL 編程、以及結合 awk、sed 等腳本處理工具編寫功能十分強大的各種文本處理腳本,由於本人已經有很久都沒有編寫過這樣的 SHELL 腳本程序了,故只能夠給你提供一個編程思路就是:查看關於 UNIX 系統下面的 SHELL 編程指南、以及 awk 、sed 命令的各種參數(不同的參數對文本文件的處理結果是截然不同的)對文本文件產生的結果。
另外提醒的就是要注意:不同版本的 SHELL 編程風格(例如:bash、C-Shell),其語法、語句並不是兼容的、其語法是相當嚴格的,所以有時候即使差那麼一點點(哪怕是一個回車換行符),SHELL 腳本程序都通不過。這也是 SHELL 編程非常難於調試的一個問題。這都是我當初進行SHELL編程時碰到過的困難。

F. 巧用awk:如何把多行日誌變成一行

如果是所有的抄行都變成1行,可以用:

awk '{printf "%s", $0}' 日誌文件名

如果是每N行變一行可以(以N=3為例)

awk '{printf "%s", $0}NR%3==0{printf " "}' 日誌文件名

G. awk如何取出它的每一行和某一列的某個元素

假設獲得每一行第二列的所有數據

awk'{print$2}'file

如果需要在awk程序中先保存,【在END塊或在某行需要使用回其他行中的數答據】

可以用

awk'{d[NR]=$2}END{for(i=1;i<=NR;i++){printd[i]}}'file

H. 如果awk處理得到兩行 如何只輸出一行例如awk 'if(nf<5)print $0'會得到兩行

參考下面的命令,可以在awk命令後通過 | 命令+tail 、head、grep組合來達到你要的效果

---------------------------------------------------
參考下cat、tail、head、tee:文件列印命令
這些命令的語法基本上相同的:命令名 [選項] [文件],而且您可以在管道中使用這些命令。這些命令的功能都是根據特定的條件選擇文件內容進行列印。
cat 工具會將文件的全部內容列印到標准輸出。
這是最常用的命令之一。例如,您可以使用:
# cat /var/log/mail/info
將郵件程序守護程序日誌的內容列印到標准輸出[14]。
cat 命令有一個非常有用的選項(-n),該選項將允許您列印行號。
某些文件,如守護程序日誌文件(如果相應的守護程序運行了的話)可能非常大[15],在屏幕上列印全部內容可能沒什麼必要。
您經常只是需要看看一個文件的某幾行。
您可以使用 tail 命令完成這一功能。默認情況下,下面的命令將會列印 /var/log/mail/info 文件的最後十行:
# tail /var/log/mail/info
您可以使用 -n 選項顯示文件的最後 N 行。例如,要顯示最後兩行,您應該執行:
# tail -n2 /var/log/mail/info
而 head 命令與 tail 十分相似,只是列印文件的頭幾行。默認情況下,下面的命令將會列印 /var/log/mail/info 文件的頭十行:
# head /var/log/mail/info
和 tail 一樣,您也可以使用 -n 選項指定要列印的行數。例如,要列印前兩行,您應該執行:
# head -n2 /var/log/mail/info
您還可以組合使用這幾條命令。
例如,如果您想要只顯示第九行和第十行,您可以先使用 head 命令選擇文件的前十行,然後再將結果通過管道送到 tail 命令。
# head /var/log/mail/info | tail -n2
豎線後面的部分將選擇最後兩行,然後將其列印到屏幕。同樣地,您也可以選擇只列印文件的倒數第 20 行:
# tail -n20 /var/log/mail/info |head -n1
在本例中,我們讓 tail 選擇了文件的最後 20 行,然後將結果通過管道傳送給 head。然後 head 命令將會從得到的數據中取出第一行列印到屏幕上。
現在我們假定您想要將上例中的結果在屏幕上顯示的同時還保存到文件 results.txt。
tee 工具可以幫到我們。其語法是:
tee [選項] [文件]
現在,我們可以將上一命令做如下更改:
# tail -n20 /var/log/mail/info |head -n1|tee results.txt
我們再來舉一個例子。我們想要選擇最後 20 行,將其保存到 results.txt,但是只在屏幕上顯示這 20 行中的第一行。那麼,我們應該輸入:
# tail -n20 /var/log/mail/info |tee results.txt |head -n1
tee 命令有一個非常有用的選項(-a),它允許您將數據追加到已有文件。
讓我們再回過頭來看看 tail 命令。像日誌這樣的文件應該是在不斷變化的,因為與其相關的守護程序每時每刻都在記錄著它所執行的動作和發生的事件。所以,如果您想要交互地觀看日誌文件,您可以使用 -f 選項:
# tail -f /var/log/mail/info
在本例中,/var/log/mail/info 文件的所有更改都會立即列印到屏幕上。當您想要知道您系統的工作原理時,使用帶 -f 選項的 tail 命令將非常有用。例如,通過查看 /var/log/messages 日誌文件,您可以時刻跟蹤系統信息和各種守護程序。
在下一節中,我們將會看到如何將 grep 用作過濾器,以便從來自其它服務的信息中拆出 Postfix 信息。

grep: 定位文件中的字元串
不管是命令的名字還是縮寫(「General Regular Expression Parser」)都顯得非常古怪,但該命令的作用和用法卻很簡單:grep 將在一個或多個文件中查找給定的模式。其語法為:
grep [選項] <模式> [一個或多個文件]
如果列出了多個文件,將會在每一行結果的開頭附加相應的文件名。使用 -h 選項可以不顯示這些文件名;使用 -l 選項可以只列出文件名。模式是一個正則表達式,盡管在大多數情況下只是一個簡單的單詞。下面列出了最常用的幾個選項:
-i:進行不區分大小寫的搜索;
-v:反轉搜索。顯示不與模式匹配的行;
-n:顯示找到行的行號;
-w:讓 grep 在進行模式匹配時匹配整個單詞。

I. 如何用awk過濾最後一行的

awk 'END{print}' 1.txt

J. 如何使用 awk 和正則表達式過濾文本或文件中的字元串

awk默認使用空格做為分隔符,可以看到,我輸出了"a b c d e" 每個字母之間都有個空格

剛好我可以利用awk默認使用空格作為分隔符這一特點來進行分割過濾

這樣過濾出來的第一列就是a,第二列就是b......以此類推。

如果有復雜的、難處理的可以繼續追問,我也很喜歡解決這些問題

閱讀全文

與awk過濾第一行相關的資料

熱點內容
反滲透膜原水壓力低怎麼辦 瀏覽:491
粘ps的uv樹脂 瀏覽:33
油氣田污水處理工 瀏覽:803
燃氣熱水管怎麼除垢 瀏覽:612
橋西污水處理廠事件 瀏覽:628
河南初效過濾器 瀏覽:828
星途lx怎麼拆空調濾芯 瀏覽:563
止水帶可以用環氧樹脂膠嗎 瀏覽:462
門牙樹脂後有壞處嗎 瀏覽:8
突破url過濾 瀏覽:26
飲水機的水管的水不痛快怎麼辦 瀏覽:467
維特拉16機油濾芯用什麼型號 瀏覽:14
飛利浦凈化器ac8612怎麼重置 瀏覽:881
豐田榮放車怎麼換濾芯 瀏覽:583
飲水機後面三個開關管什麼 瀏覽:920
離子交換脫氨氮 瀏覽:715
超濾講解 瀏覽:879
廢水硬度對蒸發結晶系統的影響 瀏覽:273
乾洗店污水處理設備需要多少錢 瀏覽:209
超濾膜廢水出口 瀏覽:495