리눅스에서는파일을 만드는 방법\n(또는 줄 구분 기호)이 있는 한 줄은 여러 줄로 변환됩니다.
fileA.txt:
trans_fileA::abcd\ndfghc\n091873\nhhjj
trans_fileB::a11d\n11hc\n73345
암호:
while read line; do
file_name=`echo $line | awk -F'::' '{print $1}' `
file_content=`echo $line | awk -F'::' '{print $2}' `
echo $file_name
echo $(eval echo ${file_content})
echo $(eval echo ${file_content}) > fileA.txt
trans_fileA는 다음과 같아야 합니다.
abcd
dfghc
091873
hhjj
제안해주세요
답변1
bash
쉘 사용 :
while IFS= read -r line; do
name=${line%%::*}
contents=${line#*::}
echo -e "$contents" >"$name"
done <fileA.txt
이는 입력 파일을 한 줄씩 읽고 다음을 사용하여 읽은 줄에서 출력 파일 이름과 내용을 추출합니다.표준 매개변수 대체. 일치의 끝에서 가장 긴 일치 하위 문자열을 제거 ${variable%%pattern}
하고 일치의 시작에서 가장 짧은 일치 하위 문자열을 제거합니다.$variable
pattern
${variable#pattern}
$variable
pattern
line
read -r
백슬래시가 다음과 같이 되도록 값을 읽습니다 .예약하다데이터에서. 그렇지 않은 경우에는 -r
보관 read
되지 않습니다. 또한 측면 공백이 데이터에서 제거되지 않도록 IFS
호출 전에 빈 문자열로 설정했습니다 .read
출력은 다음을 사용하여 수행됩니다 echo -e
.설명하다데이터의 이스케이프 시퀀스. 이는 \n
데이터의 개행 문자를 실제 개행 문자로 대체한다는 의미입니다.
이 명령을 실행하면 다음을 얻을 수 있습니다.
$ ls -l
total 12
-rw-r--r-- 1 kk wheel 71 Jun 17 16:28 fileA.txt
-rw-r--r-- 1 kk wheel 24 Jun 17 16:31 trans_fileA
-rw-r--r-- 1 kk wheel 16 Jun 17 16:31 trans_fileB
$ cat trans_fileA
abcd
dfghc
091873
hhjj
$ cat trans_fileB
a11d
11hc
73345
관련된:
답변2
내 첫 번째 생각은sed 위의 fileA.txt 파일을 고려하면 다음과 같습니다.
abcd\ndfghc\n091873\nhhjj
sed
다음을 포함하는 실행 newline.sed
:
s/\\n/\
/g
그게 다야
sed -f ./newline.sed <./fileA.txt >./trans_fileA
다음 결과를 반환합니다 trans_fileA
.
abcd
dfghc
091873
hhjj
이것이 귀하의 작업을 수행하기 위해 제가 생각할 수 있는 가장 쉬운 방법입니다.
화타이