更詳細地說,我一直在做一個任務,要求我找到一個目錄下的所有檔案,全部大寫,保存在一個沒有重疊條目的 txt 檔案中,并且所述目錄看起來像這樣。
website.com - - [date/date/date:date:date:date -0400] "GET /elv/HELLO/wave.gif HTTP/1.0" 200 1318
website.com - - [date/date/date:date:date:date -0400] "GET /elv/ball.gif HTTP/1.0" 200 306
我試過了:
grep "/elv/" (filename.txt) | awk '{print $7}' |
awk -F/ '{print $3}' | grep ^[A-Z] | sort -u > elv.txt
我明白了什么
grep "/elv/" (filename.txt)
awk '{print $7}'
grep ^[A-Z]
sort -u > elv.txt
意思是,但我不明白為什么代碼
awk -F/ '{print $3}'
那就有必要了。$7是不是習慣了不注冊過去的其余/部分?/elv/CAPITALISED_WORDCAPITALISED_WORD
我努力了
grep "/elv/" (filename.txt) | awk '{print $7}' |
awk -F/ '{print $3}' | grep ^[A-Z] | sort -u > elv.txt
對于我的初始測驗,結果出現在一個 txt 檔案中,所有名稱在/elv/.
HELLO
(list of other capitalised words)
但是當我嘗試
grep "/elv/" (filename.txt) | awk '{print $7}' | grep ^[A-Z] |
sort -u > elv.txt
txt 檔案將顯示為空白。
我原以為通過我所做的第一次嘗試,它會給出一個看起來像這樣的文本檔案。
HELLO/wave.gif
為更清晰而編輯
uj5u.com熱心網友回復:
您可以使用awk將 2 個 grep 和 2 個 awk 命令合二為一的方法:
awk '/\/elv\// && split($7, a, /\//) && a[3] ~ /^[A-Z]/ {print a[3]}' file |
sort -u
HELLO
要回答您的問題:
awk -F/ '{print $3}'
列印由 分割的記錄中的第 3 列/。
關于 awk 命令的詳細資訊:
/\/elv\//: 如果輸入行匹配文本/elv/&& split($7, a, /\//): 如果第 7 個欄位可以被分割/&& a[3] ~ /^[A-Z]/: 如果拆分陣列中的第三個欄位以大寫字母開頭{print a[3]}split: 列印陣列的第三個元素
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/523729.html
標籤:linuxgrep
上一篇:expr不是Linux內置命令,為什么expr$BASHPID顯示當前shellpid
下一篇:從文本檔案中洗掉第一個N字符
