解決策を見つけようとしています。これ質問。ソリューションとして使用したいですawk
。
私の入力ファイルは次のとおりです。
-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4
次awk
のようにコマンドを使用して2番目の値を抽出します。_
awk -F "_" '{print $2}' file
ただし、上記のコマンドは正しい値を出力しますが、出力には空行が表示されます。質問が2つあります。
質問1
venkat
出力から合計のみを取得できるように、出力から空白行を削除するにはどうすればよいですか?venkat3
私のprintf
代わりに使用すると、私が得る出力は私が望む結果ではありません。私が望む出力はこれですprint
awk
venkatvenkat3
venkat
venkat3
質問2
この値を次のように使用します。連想配列それとも、これらの値が実際に列に表示さ$1
れるのかどうかはどうすればわかりますか?
私は次のことを達成したいと思います。
awk -F "_" '$2==1{print $1}' file
編集する
awk
私はStephenの解決策に気づいていませんでした。私が言及したのと同じことをしていますか?
答え1
別の方法:
質問1
awk -F_ '$2{print $2}' file
$2
定義されている場合にのみ印刷されます。短くする方法は次のとおりです。
awk -F_ '{if($2){print $2}}' file
質問2
追加するものはありません。
答え2
質問1
$ awk -F _ 'NF > 1 {print $2}' file
venkat
venkat3
質問2
$ awk -F _ '
NR == FNR {a[$1];next}
($2 in a) {print $2}
' file file
venkat
venkat3
答え3
--only-delimited
質問1の場合は(-s
)オプションを使用できます。cut
cut -s -f2 -d'_' file
venkat
venkat3
答え4
質問1
awk -F "_" '/_/ {print $2}' file
質問2
awk -F "_" '{values[$1]=1;}; END {for (val in values) print val;}' file