여러 개의 정렬된 txt 파일이 있습니다. 출력 파일에서 수집해야 하는 특정 데이터가 있습니다.
예를 들어:
1.txt
Colour: Red
Hight: 10
2.txt
Colour: Blue
Hight: 12
sed/grep과 같은 bash 명령을 사용하여 특정 단어를 검색하고 특정 문자를 무시하여 데이터를 가져와서 출력 파일에 넣는 방법.
예를 들어:
출력.txt
Colour Hight
Red 10
Blue 12
Anees를 도와주셔서 감사합니다
답변1
각 파일에 항상 2개의 필드가 있고 항상 동일한 순서라고 가정하면 sed를 사용하여 이를 수행하는 한 가지 방법이 있습니다.
#!/bin/sh
printf '%s\t%s\n' Colour Hight
sed '
/ *Colour: */ {
s///
h
n
}
/ *Hight: */ {
s///
G
s/\n/\t/g
}
' "$@"
이 답변은 hold space
sed의 기능을 사용하여 한 줄에서 다음 줄로 데이터 값을 저장합니다.
{
우리는 명령문을 그룹화하기 위해 및 를 사용합니다 }
. 이 그룹의 모든 명령은 주소가 지정된 행(이 경우 패턴 / *Colour */
및 선택한 행) 에만 적용됩니다 / *Hight */
.
*Colour *
"색상" 및 "높이" 행에서 먼저 *Higth *
(또는)와 일치하는 텍스트를 삭제합니다 s///
.
"color" 줄에 h
나머지 텍스트를 저장합니다.hold space
, 인쇄하지 않고 다음 입력 줄로 점프합니다( n
).
Hight 행에서는 G
개행 문자 '\n' 으로 연결된 예약된 공간의 내용을 패턴 공간에 가져오거나 추가합니다 sed
. 그런 다음 \t
해당 개행 문자를 탭 문자로 바꾸고 sed
출력을 인쇄합니다.
이 답변은 sed
Linux, FreeBSD 또는 OS X 등 모든 버전에 적용됩니다.
답변2
출력 파일의 헤더를 이와 같이 배치한
echo 'Colour Hight' > out.txt
후 각 파일에 대해 다음을 수행할 수 있습니다.
awk '{printf $2" ";next;}' 1.txt >> out.txt
또는 모든 txt 파일에 대해 다음을 수행할 수 있습니다.
ls *.txt | xargs awk '{printf $2" ";if (++onr%2 == 0) print "";next;}' >> out.txt