두 개의 별도 줄이 하나로 병합되었습니다. 문제는 현재 공백으로 구분되어 있다는 것입니다. 탭 간격을 두고 두 줄을 하나로 나누는 방법을 알고 싶습니다.
현재 내가 가지고 있는 코드는 다음과 같습니다.
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
않은 값 입니다 .)0
l
loginName: