シェルコマンドを使用してテキストファイルの最初の列と最後の列のみを表示するにはどうすればよいですか?

シェルコマンドを使用してテキストファイルの最初の列と最後の列のみを表示するにはどうすればよいですか?

sedコマンドを使用して、テキストファイルの最初の列と最後の列のみを表示する方法を理解するのに役立ちます。これまでの私の最初の列は次のとおりです。

cat logfile | sed 's/\|/ /'|awk '{print $1}'

最後の列も表示したい私の弱い試みは次のとおりです。

cat logfile | sed 's/\|/ /'|awk '{print $1}{print $8}'

ただし、これは最初の列と最後の列を取り、1つのリストにマージします。 sedコマンドとawkコマンドを使用して最初の列と最後の列を明確に印刷する方法はありますか?

入力例:

foo|dog|cat|mouse|lion|ox|tiger|bar

ベストアンサー1

そこくらいです。 2つの列参照を1つにまとめるだけです。

cat logfile | sed 's/|/ /' | awk '{print $1, $8}'

また、ここでは必須ではありませんcat

sed 's/|/ /' logfile | awk '{print $1, $8}'

awkまた、列区切り文字は|空白ではなく、どちらも必要ないことがわかりますsed

awk -F '|' '{print $1, $8}' logfile

~によると提案渡すガレブ、正確に8でなくても、最後のフィールドを出力するソリューションが必要な場合に使用できます$NF

awk -F '|' '{print $1, $NF}' logfile

また|、出力でスペースを使用する代わりに区切り文字を保持したい場合は、出力フィールド区切り文字を指定できます。残念ながら、単にフラグを使用するよりも少し厄介ですが-F、これを行う3つの方法があります。

  • awkBEGINブロックに入力フィールドと出力フィールドの区切り文字自体を割り当てることができます。

    awk 'BEGIN {FS = OFS = "|"} {print $1, $8}' logfile
    
  • awkコマンドラインから呼び出すと、フラグを使用してこれらの変数を割り当てることができます-v

    awk -v 'FS=|' -v 'OFS=|' '{print $1, $8}' logfile
    
  • または簡単に:

    awk -F '|' '{print $1 "|" $8}' logfile
    

おすすめ記事