문서,
TABLE1
-------
1234
TABLE1
-------
9555
TABLE1
-------
87676
TABLE1
-------
2344
내가 원하는 출력은 다음과 같습니다
TABLE1
-------
1234
9555
87676
2344
답변1
sed
이것은 다음을 사용하는 라이너입니다 awk
.
sed '/^$/d' 파일 이름 | awk '!a[$1]++'
grep
와 다음의 조합 awk
:
grep. 파일 이름 | awk '!a[$1]++'
처럼 @카스제안된 내용은 awk
단일 명령을 통해 이 작업을 수행할 수도 있습니다.
awk '!x[$1]++ && ! /^[[:blank:]]*$/' 파일 이름
답변2
당신은 그것을 사용할 수 있습니다awk '!x[$1]++' file > file_new
이 명령을 시도할 때 제공한 파일에 추가 새 줄이 생겼습니다.
이를 수정했는데 awk '!x[$1]++' file | sed '/^$/d' > file_new
이 경우 문제가 해결될 것입니다.
답변3
이것은 오래된 스레드이지만 단일 sed 명령만 사용하여 이 답변을 제공하고 싶습니다.
sed '1,2p;/^[[:digit:]]/!d;' file
처음 두 줄(제목과 밑줄)을 유지한 다음 숫자로 시작하지 않는 모든 줄을 삭제합니다.
답변4
명령을 사용하면 uniq
중복 항목을 제거할 수 있습니다. 좋다:
cat file | sort -r | uniq
그러나 이 특별한 경우에는 파일이 작동하려면 정렬해야 하기 때문에 정확히 예상한 결과를 생성하지 않습니다. uniq
인접한 중복 행만 감지합니다.
또 다른 해결책은 파일을 읽고 TABLE
다음이 포함된 줄을 건너뛰는 것입니다 ----
(첫 번째 항목 제외).
count_t=0
count_d=0
while read line; do
if [[ $line == "TABLE"* ]] ; then
if [[ $count_t -eq 0 ]]; then
((count_t++))
else
continue
fi
fi
if [[ $line == "-----"* ]] ; then
if [[ $count_d -eq 0 ]]; then
((count_d++))
else
continue
fi
fi
echo $line
done < file
awk
하지만 다른 사람들이 게시한 솔루션이 sed
더 좋습니다.