
存在するawk
。私はSolaris 10を使用しているので、以前のバージョンかもしれませんawk
。少なくとも特定の入力については、動作する基本的な冗談を思い出しました。
awk -F\; '$3 ~ /[ ]*...............................*/' file.csv
区切り文字の周りにスペースがある場合とない場合があるため、正規表現[ ]*
の一部です。
〜したい.
ドット文字を30回印刷しないでください。、以下を試しました。
awk -F\; '$3 ~ /[ ]*.\{30\}.*/{print $3}' file.csv
結果は返されませんでした。何らかの方法で役立つ場合は使用していますksh88
。
連続30点を入力しない最良の方法は何ですか?
答え1
awk -F\; 'length($3) == 30' file.csv
図に示すように、スペースがある場合は、スペースをフィールド区切り文字の一部として作成して削除できます。
awk -F' *; *' 'length($3)==30' file.csv
答え2
GNU awk は間隔式と常に一致しません。ここに問題があります。{N}文法が必要です。 POSIX準拠のawksは-W re-interval
この構文を有効にすることができるので、試してみてください。しかし、空の構文をまったく受け入れないawkのSystem V派生バージョンを実行している可能性があります。
最良の選択肢は、FSを正規表現に設定することです。これにより、セミコロンの周囲のスペースをフィールド区切り文字の一部として扱うことができます。これは古いawk機能であり、現在使用されているawkでサポートされています。スペースを削除した後、ドットでいっぱいの正規表現を省略し、length() 関数を使用してフィールドの長さを確認できます。
awk -F"[ ]*;[ ]*" 'length($3) == 30 { print $3 }' file.csv
答え3
私が正しく理解した場合は、周囲のスペースを含めずに30文字以上の行に3番目のフィールドを印刷しようとしています。
awk -F ';' 'match($3, "[^ ].*[^ ]") && RLENGTH >= 30'