テキストファイルの特定の場所の前にあるすべての項目を削除します。

テキストファイルの特定の場所の前にあるすべての項目を削除します。

"report.csv"ファイルがあります。レポートは、
1から10までの複数のパラメータに基づいて生成されます。したがって、report.csvは最初にすべてのパラメータを印刷し、次にデフォルトの
ヘッダーとデータを印刷します。このファイルをヘッダーとデータとして処理し、
すべてのパラメータを除外する必要があります。ファイルは次のようになります。

para_1: abc
para_2: def
para_3: ghi
.
.
.
para_n: xyz

Customer_Name, Customer_Number, .....
Jon Doe,19923
Adam Plak,19985
.
.
.

列ヘッダーの位置を取得するには、次のコマンドを使用します。

これが私にこのような立場を与える

grep -n "Customer_Name" report.csv | cut -d : -f1

(例えば)13。次に、このコマンドを使用して別のファイルにコピーし、新しいファイルを使用します。

sed '1,13d' report.csv >> report_test.csv

ただし、次のように動的に作成する必要があります。

$var1 = grep -n "Customer_Name" report.csv | cut -d : -f1
$var2 = d
sed '1,$var1$var2' report.csv >> report_test.csv

専門家がこれをシェルスクリプトとして実装するのに役立ちますか?

答え1

var1=`grep -n "Customer_Name" report.csv | cut -d : -f1`
var2='d'
sed "1,${var1}${var2}"  report.csv  >> report_test.csv

または

var1=$(grep -n "Customer_Name" report.csv | cut -d : -f1)
var2='d'
sed "1,${var1}${var2}"  report.csv  >> report_test.csv

説明する

ここで私たちに必要なのはコマンドの置き換え

コマンドの置き換えは2つの方法で行うことができます。一つは、次を使用することです。

  • $(...)
  • 「...」

コマンド置換の目的は、バックティック内のコマンドを評価し、その結果を実際のコマンドの引数として提供することです。

2つのコマンド置換方法の違い

以前のスタイルのバックティックは、バックスラッシュとネストを少し異なる方法で処理します。新しいスタイルの$()は()の間のすべてをコマンドとして解釈します。新しいスタイルの$()は、すべてのPOSIX互換シェルで動作します。

コマンドの置換をよりよく理解するのに役立つものは次のとおりです。

関連情報