시나리오 리눅스 - 읽기 명령으로 인해 발생하는 하드 코딩 문제를 해결하는 방법은 무엇입니까?
Scenario
우리는 read 명령이 파일의 내용을 읽고 그 내용을 변수에 할당할 수 있다는 것을 알고 있습니다.
다음 데이터 파일을 예로 들어보세요.
$ cat data.txt
1 201623210021 wangzhiguo 25 2 201623210022 yangjiangbo 26 3 201623210023 yangzhen 24 4 201623210024 wangdong 23 5 201623210025 songdong 25
위 파일의 4개 열은 일련번호(index), 학번(number), 이름(name), 나이(age)입니다. 쉘 스크립트를 사용하여 파일을 읽고 각 줄의 값을 출력합니다.
$ cat read_data.sh
#!/bin/bash cat data.txt | while read index number name age do echo "index:${index}" echo "number:${number}" echo "name:${name}" echo "age:${age}" echo " " done
스크립트를 실행하고 결과를 확인합니다.
$ sh read_data.sh
index:1 number:201623210021 name:wangzhiguo age:25 index:2 number:201623210022 name:yangjiangbo age:26 index:3 number:201623210023 name:yangzhen age:24 index:4 number:201623210024 name:wangdong age:23 index:5 number:201623210025 name:songdong age:25
이 구현에는 명백한 단점이 있다는 것을 알고 계셨나요?
열 이름( 읽기 인덱스 번호 이름 age)가 코드에 명시적으로 지정되어 있습니다. 데이터 파일의 각 열의 의미를 파악하려면 스크립트를 읽어야 합니다.
각 열의 이름은 스크립트 각 필드의 영문 이름을 수정하려면(예를 들어 일련번호의 영문 이름을
NUMBER
로 변경하려는 경우) 여러 곳에서 스크립트를 수정해야 합니다.NUMBER
)则需要修改脚本,且修改多处;该脚本按一定顺序读取数据文件,因此,如果数据文件中的列顺序发生了变化,则依然需要修改脚本;
如果有其他数据文件需要按此方式读取,则需要根据数据文件的实际情况再重写一个新脚本;
上述实现方式虽然看起来简单,但基于上述的弊端,我们还应对其进行优化。
方案
解决的根本应该是写尽可能通用的脚本
,不依赖数据文件本身的列数、列顺序、列名称(含义)等。
可以将数据文件的各字段名称存于该数据文件的首行。当读取数据文件时,首先读取数据文件的首行,以获取各字段名称的列表;读取其它行时,将首行的值与非首行的值进行一一对应即可。
数据文件
$ cat new_data.txt
index number name age 1 201623210021 wangzhiguo 25 2 201623210022 yangjiangbo 26 3 201623210023 yangzhen 24 4 201623210024 wangdong 23 5 201623210025 songdong 25
脚本
$ cat new_read_data.sh
#!/bin/bash # 读取文件头行,存于一个数组中 tablehead=(`head -n 1 new_data.txt`) # 从文件第二行开始读取,按上述数组顺序读取各字段 tail -n +2 new_data.txt | while read ${tablehead[*]} do # 遍历数组的下标,获取tablehead数组的对应值,以及以该值命名的变量的值 for i in `seq 0 $((${#tablehead[@]}-1))` do temp=${tablehead[$i]} echo "${temp}:${!temp}" done echo "" done
结果
$ sh new_read_data.sh
index:1 number:201623210021 name:wangzhiguo age:25 index:2 number:201623210022 name:yangjiangbo age:26 index:3 number:201623210023 name:yangzhen age:24 index:4 number:201623210024 name:wangdong age:23 index:5 number:201623210025 name:songdong age:25
要写出更通用的脚本,还可以做一些判断和处理,比如:数据文件作为参数传入、检查数据文件的行数、检查数据文件的列数,等等。
扩展知识
从脚本的改进上看,比原脚本略显复杂,但却更加通用了。
如果觉得阅读脚本吃力,可以有针对性地学习下,尤其是以下知识点:
数组的相关知识:数组长度、数组内容、数组元素等
变量
${abc}
和${!abc}
최대한 다재다능한 스크립트를 작성
하고 열 수, 열 순서, 열 이름(의미) 등에 의존하지 않는 것입니다. 데이터 파일 자체. 🎜🎜데이터 파일의 첫 번째 줄에 데이터 파일의 필드 이름을 저장할 수 있습니다. 데이터 파일을 읽을 때 먼저 데이터 파일의 첫 번째 행을 읽어 각 필드 이름의 목록을 얻습니다. 다른 행을 읽을 때 첫 번째 행의 값과 필드 이름의 값을 일대일로 대응시킵니다. 첫 번째 행이 아닌 행. 🎜🎜데이터 파일🎜rrreeerrreee🎜Script🎜rrreeerrreee🎜Result🎜rrreeerrreee🎜더 일반적인 스크립트를 작성하려면 다음과 같은 판단 및 처리를 수행할 수도 있습니다. 데이터 파일, 데이터 파일의 컬럼 개수 확인 등 🎜🎜지식 확장🎜🎜스크립트 개선으로 볼 때 원래 스크립트보다 약간 더 복잡하지만 더 다양해졌습니다. 스크립트 읽기가 어렵다면 특히 다음 지식 포인트를 대상으로 학습할 수 있습니다. 🎜
- 🎜🎜배열 관련 지식: 배열 길이, 배열 내용, 배열 요소 등🎜🎜🎜🎜변수
${abc}
와 ${!abc}
🎜🎜🎜의 차이점위 내용은 시나리오 리눅스 - 읽기 명령으로 인해 발생하는 하드 코딩 문제를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Win11 시스템에서 중국어 언어 팩을 설치할 수 없는 문제 해결 Windows 11 시스템이 출시되면서 많은 사용자들이 새로운 기능과 인터페이스를 경험하기 위해 운영 체제를 업그레이드하기 시작했습니다. 그러나 일부 사용자는 업그레이드 후 중국어 언어 팩을 설치할 수 없어 경험에 문제가 있다는 사실을 발견했습니다. 이 기사에서는 Win11 시스템이 중국어 언어 팩을 설치할 수 없는 이유에 대해 논의하고 사용자가 이 문제를 해결하는 데 도움이 되는 몇 가지 솔루션을 제공합니다. 원인 분석 먼저 Win11 시스템의 무능력을 분석해 보겠습니다.

Steam은 사용자가 게임을 구매, 다운로드 및 플레이할 수 있는 세계적으로 유명한 게임 플랫폼입니다. 그러나 때때로 사용자는 Steam을 사용할 때 오류 코드 118과 같은 몇 가지 문제에 직면할 수 있습니다. 이번 글에서는 이 문제와 해결 방법을 살펴보겠습니다. 먼저 오류 코드 118이 무엇을 의미하는지 이해해 봅시다. Steam에 로그인하려고 하면 오류 코드 118이 나타납니다. 이는 컴퓨터가 Steam 서버에 연결할 수 없음을 의미합니다. 이는 네트워크 문제, 방화벽 설정, 프록시 설정 또는 기타 문제로 인해 발생할 수 있습니다.

Steam을 사용하여 게임을 다운로드, 업데이트 또는 설치할 때 다양한 오류 코드가 자주 발생합니다. 그 중 일반적인 오류 코드는 E20입니다. 이 오류 코드는 일반적으로 Steam 클라이언트가 게임을 업데이트하는 데 문제가 있음을 의미합니다. 다행히도 이 문제를 해결하는 것은 그리 어렵지 않습니다. 먼저 다음 해결 방법을 시도하여 오류 코드 E20을 수정할 수 있습니다. 1. Steam 클라이언트를 다시 시작하세요. 때때로 Steam 클라이언트를 직접 다시 시작하면 이 문제가 해결될 수 있습니다. 스팀 창에서

스마트폰 기술이 계속해서 발전하면서 휴대폰은 우리 일상생활에서 점점 더 중요한 역할을 하고 있습니다. Black Shark 휴대폰은 게이밍 성능에 중점을 둔 플래그십 휴대폰으로 플레이어들에게 큰 호응을 얻고 있습니다. 그러나 때로는 Black Shark 휴대폰을 켤 수 없는 상황에 직면하기도 합니다. 이때 이 문제를 해결하기 위해 몇 가지 조치를 취해야 합니다. 다음으로 Black Shark 휴대폰이 켜지지 않는 문제를 해결하는 방법을 알려주는 5가지 팁을 공유하겠습니다. 1단계: 배터리 전원을 확인하세요. 먼저 Black Shark 휴대폰의 전원이 충분한지 확인하세요. 휴대폰 배터리가 방전되었기 때문일 수 있습니다.

소셜 미디어의 지속적인 발전으로 Xiaohongshu는 점점 더 많은 젊은이들이 자신의 삶을 공유하고 아름다운 것을 발견할 수 있는 플랫폼이 되었습니다. 많은 사용자들이 이미지 게시 시 자동 저장 문제로 고민하고 있습니다. 그렇다면 이 문제를 해결하는 방법은 무엇입니까? 1. Xiaohongshu에 게시할 때 사진이 자동으로 저장되는 문제를 해결하는 방법은 무엇입니까? 1. 캐시 지우기 먼저 Xiaohongshu의 캐시 데이터를 지워볼 수 있습니다. 단계는 다음과 같습니다. (1) Xiaohongshu를 열고 오른쪽 하단에 있는 "내" 버튼을 클릭합니다. (2) 개인 센터 페이지에서 "설정"을 찾아 클릭합니다. 캐시 지우기' 옵션을 선택하고 확인을 클릭하세요. 캐시를 삭제한 후 샤오홍슈에 다시 진입하여 사진을 올려 자동 저장 문제가 해결되었는지 확인해 보세요. 2. Xiaohongshu 버전을 업데이트하여 Xiaohongshu를 확인하세요.

컴퓨터가 드라이버를 로드할 수 없으면 장치가 제대로 작동하지 않거나 컴퓨터와 제대로 상호 작용하지 않을 수 있다는 것은 누구나 알고 있습니다. 그렇다면 이 장치에 드라이버를 로드할 수 없다는 메시지 상자가 컴퓨터에 나타날 때 문제를 어떻게 해결합니까? 아래 편집기에서는 문제를 쉽게 해결하는 두 가지 방법을 알려드립니다. 이 장치에 드라이버를 로드할 수 없습니다. 해결 방법 1. 시작 메뉴에서 "커널 격리"를 검색합니다. 2. 메모리 무결성을 끄십시오. 위의 메시지는 "메모리 무결성이 꺼졌습니다. 장치가 취약할 수 있습니다."를 클릭하고 무시하면 사용에 영향을 미치지 않습니다. 3. 문제는 기기를 다시 시작한 후 해결될 수 있습니다.

Linux 중국어 왜곡 문제는 중국어 문자 세트 및 인코딩을 사용할 때 흔히 발생하는 문제입니다. 잘못된 파일 인코딩 설정, 시스템 로케일이 설치 또는 설정되지 않음, 터미널 디스플레이 구성 오류 등으로 인해 문자가 깨질 수 있습니다. 이 문서에서는 몇 가지 일반적인 해결 방법을 소개하고 특정 코드 예제를 제공합니다. 1. 파일 인코딩 설정을 확인하십시오. 파일 인코딩을 보려면 터미널에서 file 명령을 사용하십시오. 출력에 "charset"이 있는 경우.

제목: PyCharm을 열 수 없는 문제를 해결하는 방법 PyCharm은 강력한 Python 통합 개발 환경이지만 때때로 PyCharm을 열 수 없는 문제가 발생할 수 있습니다. 이 문서에서는 몇 가지 일반적인 해결 방법을 공유하고 구체적인 코드 예제를 제공합니다. 이 문제가 발생하는 사람들에게 도움이 되기를 바랍니다. 방법 1: 캐시 지우기 때때로 PyCharm의 캐시 파일로 인해 프로그램이 정상적으로 열리지 않을 수 있습니다. 이 문제를 해결하기 위해 캐시를 지워볼 수 있습니다. 도구
