次の形式の行を含むファイルを変更して一覧表示する方法:XXX-XXX-XXX-XXX-XXX

次の形式の行を含むファイルを変更して一覧表示する方法:XXX-XXX-XXX-XXX-XXX

たとえば、次の行を含む「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

関連情報