awk 인쇄 공간으로 구분된 열 [닫기]

awk 인쇄 공간으로 구분된 열 [닫기]

내 디렉터리에 다음 *.dat 파일이 있습니다.

$ cat holiday_us.dat
20210101 1     New Year's Day
20210102 2     Labor Day
20210103 1     Independence Day

내가 원하는 출력:

20210101_New Year'sDay
20210102_LaborDay
20210103_IndependenceDay

내가 시도한 코드:

for file in /home/path/holly*.dat
do 
awk -f ' ' '{print $1,"_",print$2}' "$file"
done
}

다음과 같은 결과가 나타납니다.

20210101
New
20210102
Labor
20210103
Independence

답변1

출력 필드 구분 기호를 OFSnull(빈) 문자열 및 $2다음으로 변경합니다 _.

$ awk -v OFS= '{ $2="_" }1' *.dat
20210101_NewYear'sDay
20210102_LaborDay
20210103_IndependenceDay

답변2

cat data | awk '{print $1"_"$3$4$5}'

그러면 원하는 결과가 출력됩니다. 질문이 있는 경우 도움이 되기를 바랍니다. 언제든지 문의해 주세요.

아니면 이렇게 할 수도 있습니다.

awk '{print $1"_"$3$4$5}' data.dat

for file in /path/to/file/holly*.dat; do awk '{print $1"_"$3$4$5}' $file; done

답변3

이것은 트릭을 수행해야합니다.

for file in /home/path/*.tmp ; do cat $file |  awk '{print$1,"_",$3$4$5}' | sed 's/ //g' ; done

답변4

이 awk 문은 C 스타일 printf 문을 사용합니다. 여기에 추가된 이점은 출력 형식을 보다 유연하게 지정할 수 있다는 것입니다. 여기서 NF는 awk에 의해 설정된 현재 행의 필드 수입니다.

awk -F ' ' '{printf("%s_", $1); for (i=3; i<=NF;i++) printf("%s ", $i);print ""}'$ 파일

예제 출력:

20210101_설날
20210102_노동절
20210103_독립기념일

실제로 공백이 기본 구분 기호이므로 다음을 사용할 수도 있습니다.

awk '{printf("%s_", $1); for (i=3; i<=NF;i++) printf("%s ", $i);print ""}'$ 파일

관련 정보