다음과 같은 거대한 데이터 파일 .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