我正在閱讀一個文本檔案以提取一些特定資訊。我能夠使用一個簡單的管道來解決它,例如:
line='[any] a b "c a" valuewanted k o'
echo $line | cut -d " " -f 6 | sort -u
# prints valuewanted
但我正在檢查所有日志文本,我看到另一個空格的值正在破壞我的管道。例如:
line='[any] a "b 1" "c a" valuewanted k o'
echo $line | cut -d " " -f 6 | sort -u
#prints a"
# must change -f to -f 7
我也嘗試過使用aws '{print $6}'但發生同樣的錯誤。
我正在閱讀一個大檔案,因此每行都無法更改位置。每條線都有一個模式,其中每個組都由空格分隔。如果內容在雙引號之間,則它與同一組有關,而不是與我在腳本中決議的不同組有關。
當一個組有一些空間時,整個組的值都在雙引號周圍。
反正有沒有讓命令cut按空格分割并"content whatever"作為一個組處理?
uj5u.com熱心網友回復:
您可以將gnu-awk 與FPAT:
awk -v FPAT='"[^"]*"|[^[:blank:]] ' -v OFS='|' '
{print $1,$2,$3,$4,$5,$6,$7}' file
[any]|a|b|"c a"|valuewanted|k|o
[any]|a|"b 1"|"c a"|valuewanted|k|o
# input data
cat file
[any] a b "c a" valuewanted k o
[any] a "b 1" "c a" valuewanted k o
我曾經print $1,$2,$3,$4,$5,$6,$7演示所有欄位值。您可以將其更改為您喜歡的任何內容。
您可以在兩行的第三個欄位中使用band "b 1"。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/533139.html
標籤:正则表达式壳awk切
上一篇:awk:比較兩個包含數字的檔案
下一篇:如何從檔案中提取文本片段?
