"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
설명하다
여기서 우리에게 필요한 것은명령 대체
명령 대체는 두 가지 방법으로 수행할 수 있습니다. 하나는 다음을 사용하는 것입니다.
- $(...)
- ``...``
명령 대체의 목적은 백틱 안에 있는 명령을 평가하고 그 결과를 실제 명령에 대한 인수로 제공하는 것입니다.
두 명령 대체 방법의 차이점
이전 스타일의 백틱 ` `은 백슬래시와 중첩을 약간 다르게 처리합니다. 새로운 스타일의 $()는 ( ) 사이의 모든 것을 명령으로 해석합니다. 새로운 스타일의 $()는 모든 POSIX 호환 쉘에서 작동합니다.
명령 대체를 더 잘 이해하는 데 도움이 되는 내용은 다음과 같습니다.