다음과 같은 출력 라인이 있습니다.
M file.txt
다음 awk 프로그램을 입력하세요:
awk '{printf("\t%s: %s %s\n", FNR, $1, $2)}'
반품
1: M file.txt
이는 가능하며 일반적으로 그렇습니다. 그러나 파일에 공백이 있고 출력 줄이 다음과 같은 경우:
M "tmux split-window subcommand.md"
awk는 이것을 제공합니다 :
1: M "tmux
그러나 원하는 출력은 다음과 같습니다.
1: M "tmux split-window subcommand.md"
이 문제를 어떻게 해결할 수 있나요?
답변1
현재 줄에 줄 번호를 추가하려면 다음 명령을 사용하십시오 awk
.
awk '{ printf("%d: %s\n", FNR, $0) }'
0번째 필드 $0
는 전체 행입니다.
답변2
구분 기호를 사용하면 따옴표 사이의 공백을 별도의 단어로 처리하지 않습니다.
따라서 입력 문자열에 나타나지 않을 것으로 생각되는 구분 기호를 사용할 수 있습니다.
echo 'M "tmux split-window subcommand.md"' | awk -F: '{printf("\t%s: %s %s\n", FNR, $1, $2)}' 1: M "tmux split-window subcommand.md"
답변3
이 시도:
#!/usr/bin/awk -f
BEGIN {
#FPAT = "([^,]+)|(\"[^\"]+\")" # seperator is ,
#FPAT = "([^,]*)|(\"[^\"]*\")" # seperator is , and allow empty field -> notice the "+" changed to "*"
FPAT = "([^ ]+)|(\"[^\"]*\")" # seperator is <space> -> notice the "," changed to " "
}
{
printf("%d: ", FNR);
for (i = 1; i <= NF; i++) {
printf("%s ", $i)
}
printf("\n");
}
GNU awk 온라인 매뉴얼에서 얻었습니다. 이 하나. https://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html