たとえば、次の行を含む「athletes」ファイルがあるとします。
1995-05-30-John-Smith
1992-John-30-Smith-10
フォーマットを#に変更しながら「Smith」で終わる行の最初の2つの単語と最後の単語をリストする方法:
したがって、出力は次のようになります。
1995#05#Smith
答え1
次のように使用できますawk
。
awk -F'-' '/Smith$/{print $1"#"$2"#"$NF}' athletes
出力は次のとおりです。
1995#05#Smith
ここで、awkはで終わる行を検索し、Smith
それらの間にある最初、2番目、および最後のフィールドを印刷します#
。
使用sed
sed -En 's/([^-]*)-([^-]*).*Smith$/\1#\2#Smith/gp' file.txt
最初の2つが発生するまで一致し、-
修正後にのみ一致する行を印刷します。
答え2
次のことを試すことができます。
grep "Smith$" file | tr "-" "#" | cut -d'#' -f1,2,5
出力:
1995#05#Smith
答え3
次の簡単なコマンドでも実行できます。
awk -F "-" '/Smith$/&&OFS="#"{print $1,$2,$NF}' file
出力
1995#05#Smith