Bash에서 awk/sed 명령 사이에 탭 공백을 추가하는 방법

Bash에서 awk/sed 명령 사이에 탭 공백을 추가하는 방법

두 개의 별도 줄이 하나로 병합되었습니다. 문제는 현재 공백으로 구분되어 있다는 것입니다. 탭 간격을 두고 두 줄을 하나로 나누는 방법을 알고 싶습니다.

현재 내가 가지고 있는 코드는 다음과 같습니다.

awk '/^loginName:/{x=NR+1}(NR<=x){print}'\t FinalResults.txt| sed "N;s/\n/ /g"

탭 명령은 이지만 %\t정확히 어디로 가는 걸까요? 또한 현재 코딩을 분석하고 모든 기능과 목적이 무엇인지 자세히 설명해 주시겠습니까? 저는 bash 작동 방식을 배우려고 노력하고 있습니다.

추가 정보: 이 질문은 다음 답변과 관련이 있습니다.https://unix.stackexchange.com/a/502156/330217. 입력 파일은 FinalResults.txt다른 질문에 표시된 것과 동일합니다.

답변1

스크립트 는 내용에 관계없이 awk로 시작하는 모든 줄 loginName:과 바로 다음 줄을 인쇄합니다.

/^loginName:/{x=NR+1} # for matching lines store the record (line) number +1 into x
(NR<=x){print} # The condition will be true for the line matching the pattern above and the following line.

sed및 에 대한 설명서를 읽어보세요 awk. 바라보다https://stackoverflow.com/q/6255796/10622916sed명령을 위해 N.

명령을 sed다음으로 바꾸십시오.

 sed "N;s/\n/\t/g"

줄을 구분하려면 공백 대신 탭을 사용하세요.

아니면 awk스크립트를 바꿔보세요

awk '/^loginName:/{x=NR+1;l=$0}NR==x{print l "\t" $0}' FinalResults.txt

그리고 sed명령을 생략합니다.
더 짧게 하고 싶다면

awk 'l{print l"\t"$0;l=0}/^loginName:/{l=$0}' FinalResults.txt

그러나 짧은 스크립트는 이해하기가 더 어려울 수 있습니다.
(여기서 출력되는 조건은 비어있지도 않고 , 행이 저장되지 l않은 값 입니다 .)0lloginName:

관련 정보