我想檢查第 1 列中的最后 3 個字母是否是字母并列印這些行。我究竟做錯了什么?
我的代碼:-
awk -F '|' ' {print str=substr( $1 , length($1) - 2) } END{if ($str ~ /^[A-Za-z]/ ) print}' file
貓檔案
12300USD|0392
abc56eur|97834
238aed|23911
aabccde|38731
73716yen|19287
.*/|982376
0NRT0|928731
預期輸出:
12300USD|0392
abc56eur|97834
238aed|23911
aabccxx|38731
73716yen|19287
uj5u.com熱心網友回復:
$ awk -F'|' '$1 ~ /[[:alpha:]]{3}$/' file
12300USD|0392
abc56eur|97834
238aed|23911
aabccde|38731
73716yen|19287
關于你的腳本有什么問題:
- 您正在 END 部分中對最后一行讀取的字母字符進行測驗,而不是每個輸入行一次。
- 您正在嘗試使用 shell 變數語法
$str而不是 awkstr。 - 您正在測驗括號運算式中的文字字符范圍,而不是使用字符類,因此 YMMV 取決于您的語言環境包含哪些字符。
- 您正在測驗以字母開頭的字串,而不是以 3 個字母結尾的字串。
uj5u.com熱心網友回復:
使用grep:
grep -P '^[^|]*[A-Za-z]{3}[|]' in_file > out_file
在這里,GNUgrep使用以下選項:
-P:使用 Perl 正則運算式。
正則運算式的意思是:
^: 字串的開始。
[^|]*: 任何非管道字符,重復 0 次或多次。
[A-Za-z]{3}: 3 個字母。
[|]: 字面管道。
uj5u.com熱心網友回復:
sed -n '/^[^|]*[a-Z][a-Z][a-Z]|/p' file
grep '^[^|]*[a-Z][a-Z][a-Z]|' file
uj5u.com熱心網友回復:
{m,g}awk '! FS<NF' FS='^[^|]*[A-Za-z][A-Za-z][A-Za-z][|]'
{m,g}awk '$!_!~"[|]"' FS='[A-Za-z][A-Za-z][A-Za-z][|]'
{m,g}awk '($!_~"[|]")<NF' FS='[A-Za-z][A-Za-z][A-Za-z][|]' # to play it safe
12300USD|0392
abc56eur|97834
238aed|23911
aabccde|38731
73716yen|19287
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/492667.html
上一篇:使用Bash比較數字
