내 디렉터리에 다음 *.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
출력 필드 구분 기호를 OFS
null(빈) 문자열 및 $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 ""}'$ 파일