가변 길이의 헤더(첫 번째 줄)가 있는 파일이 있습니다.
"One"|"Two"|"Three"
또는
"One"|"Two"|"Three"|...|"One Hundred"
루프를 실행하여 새 파일로 변환하려고 합니다.
"Hello One!"
"Hello Two!"
"Hello Three! ..."
"Hello One Hundred!"
어떻게 해야 합니까? awk를 사용하시나요? sed?
치수를 수정하지 않으면 해결책을 찾을 수 없습니다.
내 운영 체제는 입니다 Linux-RedHat-RHEL-6
.
답변1
다음은 두 번의 sed 호출을 포함하는 간단한 솔루션입니다(각 줄이 인용되어 있다고 가정).
sed -n '1s#"|"#"\n"#gp' file | sed 's#"\(.*\)"#"Hello \1!"#'
첫 번째 sed 명령은 "|"를 개행 문자로 바꿉니다. 다음으로 텍스트와 느낌표를 추가합니다.
데이터 가 없고 |
주변 환경이 "
선택 사항인 경우 다음을 사용할 수도 있습니다(더 빨라야 함).
head -1 file | tr \| \\n | sed 's#"\?\(.*\)"\?#"Hello \1!"#'
답변2
bash: 파이프로 구분된 단어를 배열로 읽어옵니다.
IFS='|' read -ra words < <(head -n 1 file)
printf "Hello %s!\n" "${words[@]}"
awk: 줄의 단어를 반복합니다.
awk -F'|' 'NR == 1 { for (i=1; i<=NF; i++) print "Hello " $i "!"; exit}' file
그리고 sed:
sed -e 2Q -e 's/\([^|]\+\)/Hello \1!/g' -e 's/[|]/\n/g' file