![Unix에서 awk를 사용하여 텍스트 파일의 홀수 필드를 인쇄하는 방법은 무엇입니까? [폐쇄]](https://linux55.com/image/59332/Unix%EC%97%90%EC%84%9C%20awk%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%99%80%EC%88%98%20%ED%95%84%EB%93%9C%EB%A5%BC%20%EC%9D%B8%EC%87%84%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
내 요구 사항에는 확실히 도움이 되지만 주어진 답변을 이해할 수 없습니다.
awk -F\| '{s="";for (i=1;i<=NF;i+=2) {s=s?s FS $i:$i} print s}' file
이것은 무엇을 {s=s?s FS $i:$i} print s}
합니까? 원하는 출력을 어떻게 인쇄합니까? 나는 이것이 삼항 연산자가 사용되고 있다는 것을 알고 있습니다. 하지만 표현식을 평가하고 출력을 인쇄하는 방법은 무엇입니까?
답변1
if-then-else로 생각해보세요
{s=s?s FS $i:$i}
다음과 같이 평가됨
{ if ( s != "" ) s=s FS $i ; ## i=3,5,7,...
else s=$i ; } ## i=1
이것은 모호한 코드처럼 보입니다.
awk -F\| '{s="";for (i=1;i<=NF;i+=2) {s=s?s FS $i:$i} print s}' file
(가장 이해하기 쉬움)
awk -F\| '{s=$1;for (i=3;i<=NF;i+=2) {s=s FS $i} print s}' file