텍스트 파일의 특정 위치 앞에 있는 모든 항목을 삭제합니다.

텍스트 파일의 특정 위치 앞에 있는 모든 항목을 삭제합니다.

"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 호환 쉘에서 작동합니다.

명령 대체를 더 잘 이해하는 데 도움이 되는 내용은 다음과 같습니다.

관련 정보