これは私のテキストファイルの一つです。
1|this|1000
2|that|2000
3|hello|3000
4|hello world|4000
5|lucky you|5000
6|awk is awesome|6000
.
.
.
$ 2から2つの単語のみを含む行(4行目と5行目)のみを印刷するにはどうすればよいですか?
私が試したことは次のとおりです。ただし、単語数ではなく文字数を計算します。
awk -F"|" '{if(length($2==2) print $0}'
答え1
awk関数の戻り値を使用できますsplit
。
$ awk -F'|' 'split($2,a,"[ \t]+") == 2' file
4|hello world|4000
5|lucky you|5000
答え2
gsub
代わりに関数の戻り値を使用することもできます。
awk -F'|' '{l=$0} gsub(/[ \t]+/,"",$2)==1{print l}'
答え3
awk '/^.+\|\w+ \w+\|/' input.txt
説明する:
'/^.+\|\w+ \w+\|/'
- このパターンに一致するすべての行を印刷します。^
- 行の先頭から始まります。.+
- 1つ以上のランダムな文字。\|
- パイプキャラクター。文字通り理解するにはバックスラッシュでエスケープする必要があり、そうでなければ「or」記号として扱われます。\w+ \w+\
- ランダムな単語文字、空白、ランダムな単語文字、つまり単語の空白の単語 - 正確に必要なものです。\|
- 2番目のパイプ文字です。
入力する
1|this|1000
2|that|2000
3|hello|3000
4|hello world|4000
5|lucky you|5000
6|awk is awesome|6000
出力
4|hello world|4000
5|lucky you|5000