다른 줄을 삭제하지 않고 Linux에서 헤더를 제거하는 방법은 무엇입니까?

다른 줄을 삭제하지 않고 Linux에서 헤더를 제거하는 방법은 무엇입니까?

다음과 같은 거대한 데이터 파일 .txt가 있습니다.

calls...
12311 34213 13344 12345 34532
23345 24445 22445 12344 12333
34456 22211 12334 12234 23344
23345 24445 22445 12344 12333

첫 번째 줄(여기에 쓰여진 호출)을 삭제하고 싶습니다.

나는 다음 명령을 사용했습니다.

sed '1d' input.txt > output.txt

이렇게 하면 "통화..."가 제거됩니다. 그러나 문제는 다른 행도 삭제된다는 것입니다. 내부의 다른 회선을 제거하지 않고 통화를 제거하는 데 도움이 될 수 있는 다른 제안이 있는 사람이 있습니까? 이 명령을 사용할 때 실제 데이터에는 117,000개의 행과 10,000개의 열이 있으므로 행 수는 68,645개이고 116,999개가 되어야 합니다. 여기에 표시된 예와 같이 작은 데이터에서 sed를 시도하면 행 수가 변경되지 않지만 실제 데이터에서는 변경됩니다. 정말 혼란스럽습니다. 왜일까요?

답변1

당신이 사용할 수있는tail

tail -n +2 input.txt > output.txt

파일의 두 번째 줄부터 시작하는 줄을 인쇄합니다(+ 기호 참고).

답변2

awk다음 명령을 사용할 수도 있습니다 .

예시 1:

awk '{gsub("^calls\.+", "");print}' input.txt > output.txt

행을 제거 input.txt하고 output.txt.

예 2:

awk '!/^calls\.+/{print}' input.txt > output.txt

awk그러면 명령에 제공된 패턴을 제외한 모든 행이 인쇄됩니다.

답변3

패턴 주소 지정 사용

GNU sed를 사용하면 패턴 주소를 사용하여 명령을 제한할 수 있습니다. 예를 들어:

sed -r '/^calls\.{3}$/d' input.txt

일치하는 패턴으로 시작하는 줄만 삭제됩니다.

답변4

이것이 내가 사용하는 것입니다:

df | awk ' {if(NR>1) print}'
cat file | awk ' {if(NR>1) print}'

또는 스크립트에서:

#!/bin/awk -f
{
   if(NR>1) print
}

그 다음에

cat file | nohead.awk

관련 정보