"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互換シェルで動作します。
コマンドの置換をよりよく理解するのに役立つものは次のとおりです。