예: 내 /temp 디렉토리에는 100개의 파일이 있습니다. 50개는 확장자가 .msg이고 50개는 .xml입니다.
/temp/test1.xml
/temp/test2.xml
/temp/test3.xml
.........
/temp/test49.xml
/temp/test50.xml
그리고
/temp/test1.msg
/temp/test2.msg
/temp/test3.msg
.........
/temp/test49.msg
/temp/test50.msg
텍스트 파일에서 .xml과 .msg 파일의 내용을 조합하여 출력하고 싶습니다. 예를 들어 출력 파일은 다음과 같아야 합니다.
content of test1.xml
content of test1.msg
content of test2.xml
content of test2.msg
content of test3.xml
content of test3.msg
............
content of test49.xml
content of test49.msg
content of test50.xml
content of test50.msg
이 /temp 디렉토리에는 항상 동일한 수의 .msg 및 .xml 파일이 있습니다. 또한 출력 파일의 내용 앞에 경로나 파일 이름을 표시할 수 있습니까? 예를 들어:
text1.xml: content of test1.xml
text1.msg: content of test1.msg
text2.xml: content of test2.xml
text2.msg: content of test2.msg
text3.xml: content of test3.xml
text3.msg: content of test3.msg
....................
text49.xml: content of test49.xml
text49.msg: content of test49.msg
text50.xml: content of test50.xml
text50.msg: content of test50.msg
나는 간단한 파이프를 파일로 사용해 보았습니다.
cat * > text.txt
그러나 이것은 필요한 결과를 제공하지 않습니다. 출력 파일에서는 먼저 모든 *.xml 파일의 내용을 나열한 다음 *.msg 파일을 나열합니다.
도와주세요.
답변1
for f in *xml ; do
cat "$f" "${f/.xml/.msg}"
done > OUTPUTFILE
쉘을 사용하는 경우 도움이 될 수 있습니다 bash
. 그렇지 않으면(다른 POSIX 쉘) cat "$f" "${f%.xml}.msg"
위 cat
행 대신에 다음을 사용하십시오.
답변2
이런 종류의 상황에서는 다음과 같이 진행하는 것이 합리적입니다.
모든 파일을 텍스트 파일로 나열합니다.
$ ls > files
텍스트 파일을 편집하여 원하지 않는 파일을 제거하고 나머지 파일을 원하는 정확한 순서로 정렬합니다.
그런 다음 다음을 수행하십시오(파일 이름에 공백이나 재미있는 문자가 없다고 가정).
$ cat $(cat files) > bigfile
이 접근 방식의 변형은 텍스트 파일을 하나의 큰 명령으로 변경하는 것입니다.
file1
file2
file with spaces 3
...
filen
에게:
cat \
file1 \
file2 \
"file with spaces 3" \
... \
filen \
> bigfile
그런 다음 파일을 스크립트로 소스로 지정하십시오.
$ . ./files
vi
를 사용 하면 버퍼의 모든 줄에 공백과 백슬래시를 추가할 수 있습니다 :%s/$/ \\/
.
답변3
for i in {1..50}; do
echo "text$i.xml: `cat text$i.xml`" >> output.txt
echo "text$i.msg: `cat text$i.msg`" >> output.txt
done
답변4
정상적인 순서라면 다음과 같이 할 수 있습니다.
배쉬에서:
for ITER in {1..50}
do
cat test${ITER}.xml
cat test${ITER}.msg
done > test.txt
또는 유틸리티가 있는 경우seq
for ITER in $(seq 1 50)
do
cat test${ITER}.xml
cat test${ITER}.msg
done > test.txt