スクリプトでcutコマンドとsedコマンドの両方を使用する

スクリプトでcutコマンドとsedコマンドの両方を使用する

Bashスクリプトには次のコードがあります。

#!/bin/bash

# gives summary of my buyings in the report.txt file

echo Here is the summary of your purchases:
echo =========================================
echo

# /dev/stdin is the standard input, i.e. the file
cat /dev/stdin | cut -d ' ' --fields=2,3 | sort && sed -n '2 p' /dev/stdin 

だから私が望むのは、スペースを区切り文字として使用して2番目と3番目のフィールドを印刷し、report.txtの2行目を印刷することですsed。ではどうすればいいですか?

修正する:

私のreport.txtの内容は次のとおりです。

Jakaria Books 5
Sakib Khata 3
Afzal Pen 12
Sharif Colorpen 2
Sakib Eraser 1
Sharif Sharpner 1

提案どおりにスクリプトを編集しましたが、次のように表示されます。

#!/bin/bash

# gives summary of my buyings in the report.txt file

echo Here is the summary of your purchases:
echo =========================================

# /dev/stdin is the standard input, i.e. the file
cat /dev/stdin | cut -d ' ' --fields=2,3 | sort | sed -n '2 p'

cat report.txt | ./summary私のスクリプトファイル名がどこにあるのかスクリプトを実行します。summary今、出力はBooks 5

2番目と3番目のフィールドを印刷するだけでなく、report.txtの2行目も印刷したいと思います。つまり、出力は次のようになります。

Books 5
Colorpen 2
Eraser 1
Khata 3
Pen 12
Sharpner 1
Sharif Sharpner 1

ベストアンサー1

sedコマンドを接続すると、&&シェルにコマンドを個別に実行するように指示します。出力をそのままにしcat ... cut ... sortてから返品クリッピングなしで2行目を印刷します。

入力(ソート)の2行目のみを印刷するには、次のように変更します。

cut -d ' ' --fields=2,3 | sort | sed -n 2p

入力ファイルを指定しないと、両方ともstdinを読み取るため、/ dev / stdinを繰り返す必要はありませんcutsed


ファイル内の2番目と3番目のスペースで区切られたフィールドを印刷し、2行目全体を印刷するには、これらの操作をすべてsedで実行できます。

sed -e 2p -e 's/^[^ ]* //' < report.txt | sort

これはsedに2つのプログラムを実行するように指示します。

  • pライン2を印刷して
  • s検索と置換:行の先頭から始まるゼロ個以上の空白以外の文字、その後に空白が続く...含む:(なし)

更新されたサンプル入力を実行すると、次の結果が表示されます。

Books 5
Colorpen 2
Eraser 1
Khata 3
Pen 12
Sakib Khata 3
Sharpner 1

...Sakib Khata 3ファイルの2番目の行があるからです。

おすすめ記事